Bug 1410739 - Remove Instantbird code from the repository. r=me DONTBUILD
authorJorg K <jorgk@jorgk.com>
Fri, 15 Jun 2018 19:45:39 +0200
changeset 24090 d4e700bab1b134447fdb27f9676e43e3f15931a8
parent 24089 ec2cc16327fedfc2642a875643f72e49913ac48c
child 24091 f41fe8a63f2b280c03c69a1ea4945b77a182bcbb
push id14524
push usermozilla@jorgk.com
push dateFri, 15 Jun 2018 17:46:30 +0000
treeherdercomm-central@d4e700bab1b1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersme
bugs1410739
Bug 1410739 - Remove Instantbird code from the repository. r=me DONTBUILD
im/LICENSE.txt
im/Makefile.in
im/app-rules.mk
im/app.mozbuild
im/app/Makefile.in
im/app/application.ini
im/app/instantbird.exe.manifest
im/app/macbuild/Contents/Info.plist.in
im/app/macbuild/Contents/MacOS-files.in
im/app/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in
im/app/module.ver.in
im/app/moz.build
im/app/nsMain.cpp
im/app/png.py
im/app/png2ico.py
im/app/profile/all-instantbird.js
im/app/profile/channel-prefs.js
im/app/profile/extensions/installed-extensions.txt
im/app/profile/extensions/moz.build
im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest
im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/moz.build
im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png
im/app/profile/localstore.rdf
im/app/profile/mimeTypes.rdf
im/app/profile/moz.build
im/app/profile/prefs.js
im/app/splash.rc
im/branding/halloween/Makefile.in
im/branding/halloween/background.png
im/branding/halloween/branding.nsi
im/branding/halloween/configure.sh
im/branding/halloween/content/about-credits.png
im/branding/halloween/content/about-footer.png
im/branding/halloween/content/about.png
im/branding/halloween/content/icon64.png
im/branding/halloween/default16.png
im/branding/halloween/disk.icns
im/branding/halloween/dsstore
im/branding/halloween/gtk/blistWindow.png
im/branding/halloween/gtk/blistWindow16.png
im/branding/halloween/gtk/blistWindow48.png
im/branding/halloween/gtk/convWindow.png
im/branding/halloween/gtk/convWindow16.png
im/branding/halloween/gtk/convWindow48.png
im/branding/halloween/gtk/default.png
im/branding/halloween/gtk/default16.png
im/branding/halloween/gtk/default48.png
im/branding/halloween/instantbird.icns
im/branding/halloween/instantbird.ico
im/branding/halloween/jar.mn
im/branding/halloween/locales/en-US/brand.dtd
im/branding/halloween/locales/en-US/brand.properties
im/branding/halloween/locales/jar.mn
im/branding/halloween/locales/moz.build
im/branding/halloween/moz.build
im/branding/halloween/mozicon128.png
im/branding/halloween/mozicon16.xpm
im/branding/halloween/mozicon50.xpm
im/branding/halloween/windows/blistWindow.ico
im/branding/halloween/windows/convWindow.ico
im/branding/halloween/windows/default.ico
im/branding/nightly/Makefile.in
im/branding/nightly/background.png
im/branding/nightly/branding.nsi
im/branding/nightly/configure.sh
im/branding/nightly/content/about-credits.png
im/branding/nightly/content/about-footer.png
im/branding/nightly/content/about.png
im/branding/nightly/content/icon64.png
im/branding/nightly/default16.png
im/branding/nightly/disk.icns
im/branding/nightly/dsstore
im/branding/nightly/gtk/blistWindow.png
im/branding/nightly/gtk/blistWindow16.png
im/branding/nightly/gtk/blistWindow48.png
im/branding/nightly/gtk/convWindow.png
im/branding/nightly/gtk/convWindow16.png
im/branding/nightly/gtk/convWindow48.png
im/branding/nightly/gtk/default.png
im/branding/nightly/gtk/default16.png
im/branding/nightly/gtk/default48.png
im/branding/nightly/instantbird.icns
im/branding/nightly/instantbird.ico
im/branding/nightly/jar.mn
im/branding/nightly/locales/en-US/brand.dtd
im/branding/nightly/locales/en-US/brand.properties
im/branding/nightly/locales/jar.mn
im/branding/nightly/locales/moz.build
im/branding/nightly/moz.build
im/branding/nightly/mozicon128.png
im/branding/nightly/mozicon16.xpm
im/branding/nightly/mozicon50.xpm
im/branding/nightly/windows/blistWindow.ico
im/branding/nightly/windows/convWindow.ico
im/branding/nightly/windows/default.ico
im/branding/nightly/wizHeader.bmp
im/branding/nightly/wizHeaderRTL.bmp
im/branding/nightly/wizWatermark.bmp
im/build.mk
im/components/contentHandler.js
im/components/contentHandler.manifest
im/components/devtools/content/webconsole-overlay.xul
im/components/devtools/jar.mn
im/components/devtools/moz.build
im/components/ibCommandLineHandler.js
im/components/ibCommandLineHandler.manifest
im/components/ibConvStatsService.js
im/components/ibConvStatsService.manifest
im/components/ibDockBadge.js
im/components/ibDockBadge.manifest
im/components/ibIConvStatsService.idl
im/components/ibStatusCommandLineHandler.js
im/components/ibStatusCommandLineHandler.manifest
im/components/mintrayr/content/mintrayr.js
im/components/mintrayr/content/mintrayr.xul
im/components/mintrayr/jar.mn
im/components/mintrayr/moz.build
im/components/mintrayr/resources.rc
im/components/mintrayr/trayIToolkit.idl
im/components/mintrayr/trayModule.cpp
im/components/mintrayr/trayPlatform.h
im/components/mintrayr/trayPlatformGtk2.cpp
im/components/mintrayr/trayPlatformGtk2.h
im/components/mintrayr/trayPlatformWin.cpp
im/components/mintrayr/trayPlatformWin.h
im/components/mintrayr/trayToolkit.cpp
im/components/mintrayr/trayToolkit.h
im/components/moz.build
im/components/profileMigrator.js
im/components/profileMigrator.manifest
im/config/mozconfigs/linux/mozconfig
im/config/mozconfigs/linux/mozconfig-release
im/config/mozconfigs/macosx/mozconfig
im/config/mozconfigs/macosx/mozconfig-release
im/config/mozconfigs/win32/mozconfig
im/config/mozconfigs/win32/mozconfig-release
im/config/version.txt
im/configure.in
im/confvars.sh
im/content/aboutDialog.css
im/content/aboutDialog.xul
im/content/aboutPanel.xml
im/content/account.js
im/content/account.xul
im/content/accountWizard.css
im/content/accountWizard.js
im/content/accountWizard.xml
im/content/accountWizard.xul
im/content/accounts.js
im/content/accounts.xul
im/content/addbuddy.js
im/content/addbuddy.xul
im/content/blist.css
im/content/blist.js
im/content/blist.xul
im/content/buddy.xml
im/content/contact.xml
im/content/conv.xml
im/content/convZoom.js
im/content/conversation.xml
im/content/credits.xhtml
im/content/debug/debug.js
im/content/debug/debug.xul
im/content/debug/fake/fake.js
im/content/debug/fake/fake.xul
im/content/debug/viewselectionsource.xul
im/content/debugLog.html
im/content/debugLogPanel.xml
im/content/engineManager.js
im/content/engineManager.xul
im/content/extensions-discover.js
im/content/extensions-discover.xul
im/content/extensions.js
im/content/extensions.xul
im/content/group.xml
im/content/hiddenWindow.xul
im/content/instantbird.css
im/content/instantbird.js
im/content/instantbird.xul
im/content/jar.mn
im/content/joinchat.js
im/content/joinchat.xul
im/content/jsConsoleOverlay.xul
im/content/jsTreeView.js
im/content/macgestures.js
im/content/menus-mac.xul
im/content/menus-unix.xul
im/content/menus-win.xul
im/content/menus.js
im/content/menus.xul
im/content/menus.xul.inc
im/content/moz.build
im/content/newtab.xml
im/content/nsContextMenu.js
im/content/overrides/app-license.html
im/content/preferences/advanced.js
im/content/preferences/advanced.xul
im/content/preferences/applicationManager.js
im/content/preferences/applicationManager.xul
im/content/preferences/applications.js
im/content/preferences/applications.xul
im/content/preferences/colors.xul
im/content/preferences/connection.js
im/content/preferences/connection.xul
im/content/preferences/content.js
im/content/preferences/content.xul
im/content/preferences/handlers.css
im/content/preferences/handlers.xml
im/content/preferences/main.js
im/content/preferences/main.xul
im/content/preferences/messagestyle.js
im/content/preferences/preferences.xul
im/content/preferences/privacy.js
im/content/preferences/privacy.xul
im/content/preferences/smiley.css
im/content/preferences/smiley.xml
im/content/preferences/smileys.js
im/content/preferences/tabs.js
im/content/preferences/tabs.xul
im/content/preferences/themes.js
im/content/preferences/themes.xul
im/content/proxies.css
im/content/proxies.js
im/content/proxies.xul
im/content/proxy.xml
im/content/softwareUpdateOverlay.xul
im/content/tabbrowser.css
im/content/tabbrowser.xml
im/content/utilities.js
im/content/viewlog.css
im/content/viewlog.js
im/content/viewlog.xul
im/installer/Makefile.in
im/installer/allowed-dupes.mn
im/installer/moz.build
im/installer/package-manifest.in
im/installer/removed-files.in
im/installer/windows/Makefile.in
im/installer/windows/app.tag
im/installer/windows/moz.build
im/installer/windows/nsis/CVS/Entries
im/installer/windows/nsis/CVS/Repository
im/installer/windows/nsis/CVS/Root
im/installer/windows/nsis/defines.nsi.in
im/installer/windows/nsis/installer.nsi
im/installer/windows/nsis/shared.nsh
im/installer/windows/nsis/uninstaller.nsi
im/installer/windows/nsis/updater_append.ini
im/locales/Makefile.in
im/locales/en-US/all-l10n.js
im/locales/en-US/chrome/instantbird/aboutDialog.dtd
im/locales/en-US/chrome/instantbird/account.dtd
im/locales/en-US/chrome/instantbird/accountWizard.dtd
im/locales/en-US/chrome/instantbird/accountWizard.properties
im/locales/en-US/chrome/instantbird/accounts.properties
im/locales/en-US/chrome/instantbird/addbuddy.dtd
im/locales/en-US/chrome/instantbird/conversation.properties
im/locales/en-US/chrome/instantbird/core.properties
im/locales/en-US/chrome/instantbird/credits.dtd
im/locales/en-US/chrome/instantbird/engineManager.dtd
im/locales/en-US/chrome/instantbird/engineManager.properties
im/locales/en-US/chrome/instantbird/extensions-discover.dtd
im/locales/en-US/chrome/instantbird/extensions.properties
im/locales/en-US/chrome/instantbird/instantbird.dtd
im/locales/en-US/chrome/instantbird/instantbird.properties
im/locales/en-US/chrome/instantbird/joinChat.dtd
im/locales/en-US/chrome/instantbird/mintrayr.dtd
im/locales/en-US/chrome/instantbird/newtab.dtd
im/locales/en-US/chrome/instantbird/newtab.properties
im/locales/en-US/chrome/instantbird/preferences/advanced.dtd
im/locales/en-US/chrome/instantbird/preferences/applicationManager.dtd
im/locales/en-US/chrome/instantbird/preferences/applicationManager.properties
im/locales/en-US/chrome/instantbird/preferences/applications.dtd
im/locales/en-US/chrome/instantbird/preferences/colors.dtd
im/locales/en-US/chrome/instantbird/preferences/connection.dtd
im/locales/en-US/chrome/instantbird/preferences/content.dtd
im/locales/en-US/chrome/instantbird/preferences/main.dtd
im/locales/en-US/chrome/instantbird/preferences/preferences.dtd
im/locales/en-US/chrome/instantbird/preferences/preferences.properties
im/locales/en-US/chrome/instantbird/preferences/privacy.dtd
im/locales/en-US/chrome/instantbird/preferences/tabs.dtd
im/locales/en-US/chrome/instantbird/preferences/themes.dtd
im/locales/en-US/chrome/instantbird/preferences/themes.properties
im/locales/en-US/chrome/instantbird/proxies.dtd
im/locales/en-US/chrome/instantbird/proxies.properties
im/locales/en-US/chrome/instantbird/quitDialog.properties
im/locales/en-US/chrome/instantbird/region.properties
im/locales/en-US/chrome/instantbird/tabbrowser.dtd
im/locales/en-US/chrome/instantbird/tabbrowser.properties
im/locales/en-US/chrome/instantbird/updates.properties
im/locales/en-US/chrome/instantbird/winjumplist.properties
im/locales/en-US/defines.inc
im/locales/en-US/installer/custom.properties
im/locales/en-US/installer/mui.properties
im/locales/en-US/installer/override.properties
im/locales/en-US/searchplugins/amazondotcom.xml
im/locales/en-US/searchplugins/answers.xml
im/locales/en-US/searchplugins/creativecommons.xml
im/locales/en-US/searchplugins/ddg.xml
im/locales/en-US/searchplugins/google.xml
im/locales/en-US/searchplugins/list.txt
im/locales/en-US/searchplugins/wikipedia.xml
im/locales/en-US/searchplugins/yahoo.xml
im/locales/en-US/updater/updater.ini
im/locales/filter.py
im/locales/generic/install.rdf
im/locales/jar.mn
im/locales/l10n.ini
im/locales/moz.build
im/modules/ibCore.jsm
im/modules/ibInterruptions.jsm
im/modules/ibNotifications.jsm
im/modules/ibSounds.jsm
im/modules/ibTagMenu.jsm
im/modules/ibWinJumpList.jsm
im/modules/imWindows.jsm
im/modules/moz.build
im/moz.build
im/moz.configure
im/test/xpcshell.ini
im/themes/accountWizard.css
im/themes/accounts-aero.css
im/themes/accounts.css
im/themes/actionicon-tab-linux.png
im/themes/actionicon-tab-mac.png
im/themes/actionicon-tab-mac@2x.png
im/themes/actionicon-tab-win.png
im/themes/alert.css
im/themes/blist-aero.css
im/themes/blist.css
im/themes/conversation-aero.css
im/themes/conversation.css
im/themes/debugLog.css
im/themes/debugLogPanel.css
im/themes/engineManager.css
im/themes/founder.png
im/themes/half-operator.png
im/themes/icon.png
im/themes/instantbird-aero.css
im/themes/instantbird.css
im/themes/jar.mn
im/themes/menulist.css
im/themes/menus.css
im/themes/messages/bubbles/Bitmaps/indicator_0.png
im/themes/messages/bubbles/Bitmaps/indicator_0_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_10.png
im/themes/messages/bubbles/Bitmaps/indicator_100.png
im/themes/messages/bubbles/Bitmaps/indicator_100_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_10_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_110.png
im/themes/messages/bubbles/Bitmaps/indicator_110_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_120.png
im/themes/messages/bubbles/Bitmaps/indicator_120_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_130.png
im/themes/messages/bubbles/Bitmaps/indicator_130_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_140.png
im/themes/messages/bubbles/Bitmaps/indicator_140_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_150.png
im/themes/messages/bubbles/Bitmaps/indicator_150_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_160.png
im/themes/messages/bubbles/Bitmaps/indicator_160_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_170.png
im/themes/messages/bubbles/Bitmaps/indicator_170_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_180.png
im/themes/messages/bubbles/Bitmaps/indicator_180_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_190.png
im/themes/messages/bubbles/Bitmaps/indicator_190_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_20.png
im/themes/messages/bubbles/Bitmaps/indicator_200.png
im/themes/messages/bubbles/Bitmaps/indicator_200_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_20_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_210.png
im/themes/messages/bubbles/Bitmaps/indicator_210_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_220.png
im/themes/messages/bubbles/Bitmaps/indicator_220_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_230.png
im/themes/messages/bubbles/Bitmaps/indicator_230_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_240.png
im/themes/messages/bubbles/Bitmaps/indicator_240_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_250.png
im/themes/messages/bubbles/Bitmaps/indicator_250_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_260.png
im/themes/messages/bubbles/Bitmaps/indicator_260_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_270.png
im/themes/messages/bubbles/Bitmaps/indicator_270_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_280.png
im/themes/messages/bubbles/Bitmaps/indicator_280_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_290.png
im/themes/messages/bubbles/Bitmaps/indicator_290_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_30.png
im/themes/messages/bubbles/Bitmaps/indicator_300.png
im/themes/messages/bubbles/Bitmaps/indicator_300_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_30_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_310.png
im/themes/messages/bubbles/Bitmaps/indicator_310_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_320.png
im/themes/messages/bubbles/Bitmaps/indicator_320_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_330.png
im/themes/messages/bubbles/Bitmaps/indicator_330_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_340.png
im/themes/messages/bubbles/Bitmaps/indicator_340_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_350.png
im/themes/messages/bubbles/Bitmaps/indicator_350_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_40.png
im/themes/messages/bubbles/Bitmaps/indicator_40_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_50.png
im/themes/messages/bubbles/Bitmaps/indicator_50_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_60.png
im/themes/messages/bubbles/Bitmaps/indicator_60_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_70.png
im/themes/messages/bubbles/Bitmaps/indicator_70_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_80.png
im/themes/messages/bubbles/Bitmaps/indicator_80_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_90.png
im/themes/messages/bubbles/Bitmaps/indicator_90_alt.png
im/themes/messages/bubbles/Bitmaps/indicator_grey.png
im/themes/messages/bubbles/Bitmaps/minus-hover.png
im/themes/messages/bubbles/Bitmaps/minus.png
im/themes/messages/bubbles/Bitmaps/plus-hover.png
im/themes/messages/bubbles/Bitmaps/plus.png
im/themes/messages/bubbles/Footer.html
im/themes/messages/bubbles/Incoming/Content.html
im/themes/messages/bubbles/Incoming/Context.html
im/themes/messages/bubbles/Incoming/NextContent.html
im/themes/messages/bubbles/Info.plist
im/themes/messages/bubbles/NextStatus.html
im/themes/messages/bubbles/Status.html
im/themes/messages/bubbles/Variants/Blue_-_Green.css
im/themes/messages/bubbles/Variants/Blue_-_Green_Alternating.css
im/themes/messages/bubbles/Variants/Blue_-_Pink.css
im/themes/messages/bubbles/Variants/Blue_-_Pink_Alternating.css
im/themes/messages/bubbles/Variants/Blue_-_Red.css
im/themes/messages/bubbles/Variants/Blue_-_Red_Alternating.css
im/themes/messages/bubbles/Variants/Green_-_Blue.css
im/themes/messages/bubbles/Variants/Green_-_Blue_Alternating.css
im/themes/messages/bubbles/Variants/Green_-_Purple.css
im/themes/messages/bubbles/Variants/Green_-_Purple_Alternating.css
im/themes/messages/bubbles/Variants/Green_-_Red.css
im/themes/messages/bubbles/Variants/Green_-_Red_Alternating.css
im/themes/messages/bubbles/Variants/Grey_-_Blue.css
im/themes/messages/bubbles/Variants/Grey_-_Blue_Alternating.css
im/themes/messages/bubbles/Variants/Grey_-_Pink.css
im/themes/messages/bubbles/Variants/Grey_-_Pink_Alternating.css
im/themes/messages/bubbles/Variants/Grey_-_Purple.css
im/themes/messages/bubbles/Variants/Grey_-_Purple_Alternating.css
im/themes/messages/bubbles/Variants/Grey_-_Red.css
im/themes/messages/bubbles/Variants/Grey_-_Red_Alternating.css
im/themes/messages/bubbles/Variants/Pink_-_Blue.css
im/themes/messages/bubbles/Variants/Pink_-_Blue_Alternating.css
im/themes/messages/bubbles/Variants/Pink_-_Purple.css
im/themes/messages/bubbles/Variants/Pink_-_Purple_Alternating.css
im/themes/messages/bubbles/Variants/Purple_-_Green.css
im/themes/messages/bubbles/Variants/Purple_-_Green_Alternating.css
im/themes/messages/bubbles/Variants/Purple_-_Pink.css
im/themes/messages/bubbles/Variants/Purple_-_Pink_Alternating.css
im/themes/messages/bubbles/Variants/Red_-_Blue.css
im/themes/messages/bubbles/Variants/Red_-_Blue_Alternating.css
im/themes/messages/bubbles/Variants/Red_-_Green.css
im/themes/messages/bubbles/Variants/Red_-_Green_Alternating.css
im/themes/messages/bubbles/main.css
im/themes/messages/dark/Footer.html
im/themes/messages/dark/Incoming/Content.html
im/themes/messages/dark/Incoming/Context.html
im/themes/messages/dark/Incoming/NextContent.html
im/themes/messages/dark/Incoming/NextContext.html
im/themes/messages/dark/Info.plist
im/themes/messages/dark/Status.html
im/themes/messages/dark/Variants/Blue.css
im/themes/messages/dark/Variants/Green.css
im/themes/messages/dark/Variants/Purple.css
im/themes/messages/dark/Variants/Red.css
im/themes/messages/dark/Variants/Yellow.css
im/themes/messages/dark/main.css
im/themes/messages/papersheets/Bitmaps/information.png
im/themes/messages/papersheets/Bitmaps/minus.png
im/themes/messages/papersheets/Bitmaps/plus.png
im/themes/messages/papersheets/Footer.html
im/themes/messages/papersheets/Incoming/Content.html
im/themes/messages/papersheets/Incoming/Context.html
im/themes/messages/papersheets/Incoming/NextContent.html
im/themes/messages/papersheets/Info.plist
im/themes/messages/papersheets/NextStatus.html
im/themes/messages/papersheets/Status.html
im/themes/messages/papersheets/Variants/White.css
im/themes/messages/papersheets/main.css
im/themes/messages/simple/Incoming/Content.html
im/themes/messages/simple/Incoming/Context.html
im/themes/messages/simple/Incoming/NextContext.html
im/themes/messages/simple/Info.plist
im/themes/messages/simple/Status.html
im/themes/messages/simple/Variants/Dark.css
im/themes/messages/simple/Variants/Normal.css
im/themes/messages/simple/main.css
im/themes/moz.build
im/themes/multiUserIcon.png
im/themes/newConversation.png
im/themes/newMessage.png
im/themes/newtab.css
im/themes/operator.png
im/themes/preferences-gnomestripe/Options.png
im/themes/preferences-gnomestripe/alwaysAsk.png
im/themes/preferences-gnomestripe/applications.css
im/themes/preferences-gnomestripe/mail.png
im/themes/preferences-gnomestripe/preferences.css
im/themes/preferences-pinstripe/Options.png
im/themes/preferences-pinstripe/alwaysAsk.png
im/themes/preferences-pinstripe/application.png
im/themes/preferences-pinstripe/applications.css
im/themes/preferences-pinstripe/preferences.css
im/themes/preferences-pinstripe/saveFile.png
im/themes/preferences-winstripe/Options-aero.png
im/themes/preferences-winstripe/Options.png
im/themes/preferences-winstripe/alwaysAsk-aero.png
im/themes/preferences-winstripe/alwaysAsk.png
im/themes/preferences-winstripe/application-aero.png
im/themes/preferences-winstripe/application.png
im/themes/preferences-winstripe/applications.css
im/themes/preferences-winstripe/mail-aero.png
im/themes/preferences-winstripe/mail.png
im/themes/preferences-winstripe/preferences.css
im/themes/preferences-winstripe/saveFile-aero.png
im/themes/preferences-winstripe/saveFile.png
im/themes/richlistbox.css
im/themes/select-file.png
im/themes/select-file@2x.png
im/themes/smileys/angry.png
im/themes/smileys/confused.png
im/themes/smileys/cool.png
im/themes/smileys/cry.png
im/themes/smileys/embarrassed.png
im/themes/smileys/grin.png
im/themes/smileys/heart.png
im/themes/smileys/manga_annoyed.png
im/themes/smileys/manga_embarrassed.png
im/themes/smileys/manga_smile.png
im/themes/smileys/manga_stunned.png
im/themes/smileys/manga_tired.png
im/themes/smileys/sad.png
im/themes/smileys/shocked.png
im/themes/smileys/slant.png
im/themes/smileys/slant2.png
im/themes/smileys/smile.png
im/themes/smileys/sp_laugh.png
im/themes/smileys/straight_face.png
im/themes/smileys/theme.js
im/themes/smileys/tongue.png
im/themes/smileys/wink.png
im/themes/sounds/alert.wav
im/themes/sounds/login.wav
im/themes/sounds/logout.wav
im/themes/sounds/receive.wav
im/themes/sounds/send.wav
im/themes/tabbrowser-gnomestripe/tab-overflow-border.png
im/themes/tabbrowser-gnomestripe/tab.png
im/themes/tabbrowser-gnomestripe/tabDragIndicator.png
im/themes/tabbrowser-gnomestripe/tabbrowser.css
im/themes/tabbrowser-pinstripe/alltabs-box-bkgnd-icon-lion.png
im/themes/tabbrowser-pinstripe/alltabs-box-bkgnd-icon-lion@2x.png
im/themes/tabbrowser-pinstripe/alltabs-box-bkgnd-icon.png
im/themes/tabbrowser-pinstripe/newtab.png
im/themes/tabbrowser-pinstripe/newtab@2x.png
im/themes/tabbrowser-pinstripe/tab-arrow-left.png
im/themes/tabbrowser-pinstripe/tab-arrow-left@2x.png
im/themes/tabbrowser-pinstripe/tab-arrow-right.png
im/themes/tabbrowser-pinstripe/tab-arrow-right@2x.png
im/themes/tabbrowser-pinstripe/tab-overflow-border.png
im/themes/tabbrowser-pinstripe/tab-top-hover-active.png
im/themes/tabbrowser-pinstripe/tab-top-hover-active@2x.png
im/themes/tabbrowser-pinstripe/tab-top-normal-active.png
im/themes/tabbrowser-pinstripe/tab-top-normal-active@2x.png
im/themes/tabbrowser-pinstripe/tab-top-selected-active.png
im/themes/tabbrowser-pinstripe/tab-top-selected-active@2x.png
im/themes/tabbrowser-pinstripe/tabDragIndicator.png
im/themes/tabbrowser-pinstripe/tabDragIndicator@2x.png
im/themes/tabbrowser-pinstripe/tabbrowser.css
im/themes/tabbrowser-winstripe/mainwindow-dropdown-arrow.png
im/themes/tabbrowser-winstripe/newtab.png
im/themes/tabbrowser-winstripe/tab-arrow-left.png
im/themes/tabbrowser-winstripe/tab-overflow-border.png
im/themes/tabbrowser-winstripe/tab.png
im/themes/tabbrowser-winstripe/tabDragIndicator.png
im/themes/tabbrowser-winstripe/tabbrowser-aero.css
im/themes/tabbrowser-winstripe/tabbrowser.css
im/themes/tag-aero.png
im/themes/tag-linux.png
im/themes/tag-mac.png
im/themes/tag-mac@2x.png
im/themes/tag-win.png
im/themes/userIcon.png
im/themes/userIcon.svg
im/themes/viewlog.css
im/themes/voice.png
im/themes/webRTC-shareDevice-16.png
im/themes/webRTC-shareDevice-16@2x.png
im/themes/winstripe/instantbird/prpl/prpl-aim-32.png
im/themes/winstripe/instantbird/prpl/prpl-aim-48.png
im/themes/winstripe/instantbird/prpl/prpl-aim.png
im/themes/winstripe/instantbird/prpl/prpl-bilboed-netsoul-32.png
im/themes/winstripe/instantbird/prpl/prpl-bilboed-netsoul-48.png
im/themes/winstripe/instantbird/prpl/prpl-bilboed-netsoul.png
im/themes/winstripe/instantbird/prpl/prpl-bonjour-32.png
im/themes/winstripe/instantbird/prpl/prpl-bonjour-48.png
im/themes/winstripe/instantbird/prpl/prpl-bonjour.png
im/themes/winstripe/instantbird/prpl/prpl-gg-32.png
im/themes/winstripe/instantbird/prpl/prpl-gg-48.png
im/themes/winstripe/instantbird/prpl/prpl-gg.png
im/themes/winstripe/instantbird/prpl/prpl-google-talk-32.png
im/themes/winstripe/instantbird/prpl/prpl-google-talk.png
im/themes/winstripe/instantbird/prpl/prpl-icq-32.png
im/themes/winstripe/instantbird/prpl/prpl-icq-48.png
im/themes/winstripe/instantbird/prpl/prpl-icq.png
im/themes/winstripe/instantbird/prpl/prpl-irc-32.png
im/themes/winstripe/instantbird/prpl/prpl-irc-48.png
im/themes/winstripe/instantbird/prpl/prpl-irc.png
im/themes/winstripe/instantbird/prpl/prpl-jabber-32.png
im/themes/winstripe/instantbird/prpl/prpl-jabber-48.png
im/themes/winstripe/instantbird/prpl/prpl-jabber.png
im/themes/winstripe/instantbird/prpl/prpl-meanwhile-32.png
im/themes/winstripe/instantbird/prpl/prpl-meanwhile-48.png
im/themes/winstripe/instantbird/prpl/prpl-meanwhile.png
im/themes/winstripe/instantbird/prpl/prpl-msn-32.png
im/themes/winstripe/instantbird/prpl/prpl-msn-48.png
im/themes/winstripe/instantbird/prpl/prpl-msn.png
im/themes/winstripe/instantbird/prpl/prpl-myspace-32.png
im/themes/winstripe/instantbird/prpl/prpl-myspace-48.png
im/themes/winstripe/instantbird/prpl/prpl-myspace.png
im/themes/winstripe/instantbird/prpl/prpl-novell-32.png
im/themes/winstripe/instantbird/prpl/prpl-novell-48.png
im/themes/winstripe/instantbird/prpl/prpl-novell.png
im/themes/winstripe/instantbird/prpl/prpl-qq-32.png
im/themes/winstripe/instantbird/prpl/prpl-qq-48.png
im/themes/winstripe/instantbird/prpl/prpl-qq.png
im/themes/winstripe/instantbird/prpl/prpl-silc-32.png
im/themes/winstripe/instantbird/prpl/prpl-silc-48.png
im/themes/winstripe/instantbird/prpl/prpl-silc.png
im/themes/winstripe/instantbird/prpl/prpl-simple-32.png
im/themes/winstripe/instantbird/prpl/prpl-simple-48.png
im/themes/winstripe/instantbird/prpl/prpl-simple.png
im/themes/winstripe/instantbird/prpl/prpl-yahoo-32.png
im/themes/winstripe/instantbird/prpl/prpl-yahoo-48.png
im/themes/winstripe/instantbird/prpl/prpl-yahoo.png
im/themes/winstripe/instantbird/prpl/prpl-zephyr-32.png
im/themes/winstripe/instantbird/prpl/prpl-zephyr-48.png
im/themes/winstripe/instantbird/prpl/prpl-zephyr.png
deleted file mode 100644
--- a/im/LICENSE.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Official *binaries* of this product released by the Instantbird team
-(http://www.instantbird.com/) are made available under the GNU General
-Public License GPL version 2.0 or later.
-
-All of the *source code* for this product is available under licenses
-which are both free and open source.
-
-Most is available under one of the following:
- - the Mozilla Public License (MPL) 2.0,
- - the GNU General Public License (GPL) 2.0 or later,
- - the GNU Lesser General Public License (LGPL) 2.1 or later.
-
-The remainder of the software is available under a variety of more permissive
-licenses.
-
-See about:license for details.
deleted file mode 100644
--- a/im/Makefile.in
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-include $(moztopsrcdir)/config/rules.mk
-
-ifdef MAKENSISU
-# For Windows build the uninstaller during the application build since the
-# uninstaller is included with the application for mar file generation.
-libs::
-	$(MAKE) -C installer/windows uninstaller
-endif
-
-
-# As a fallout from bug 1247162, the sourcestamp in application.ini and
-# platform.ini are the same, which isn't a problem for Firefox, but
-# it's not right for anything else. So we correct platform.ini here.
-
-MOZ_REV=$(shell hg -R "$(moztopsrcdir)" parent --template="{node}" 2>/dev/null)
-
-libs:: $(DIST)/bin/platform.ini
-	sed -e "s/^\(SourceStamp=\).*/\1$(MOZ_REV)/" $(DIST)/bin/platform.ini \
-		> $(DIST)/bin/platform.ini~
-	mv -f $(DIST)/bin/platform.ini~ $(DIST)/bin/platform.ini
deleted file mode 100644
--- a/im/app-rules.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This is defined here instead of in build.mk to override values from
-# upload-files.mk which is loaded by moz-automation.mk after our build.mk
-PKG_INST_PATH =
-UPLOAD_FILES = $(wildcard $(foreach AB_CD,$(AB_CD) $(SHIPPED_LOCALES),\
-                                          $(DIST)/$(PACKAGE) $(INSTALLER_PACKAGE))\
-                          $(DIST)/$(PKG_BASENAME).txt\
-                          $(DIST)/$(PKG_UPDATE_PATH)*.mar)
\ No newline at end of file
deleted file mode 100644
--- a/im/app.mozbuild
+++ /dev/null
@@ -1,16 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-include('/toolkit/toolkit.mozbuild')
-
-DIRS += [
-    '/%s' % CONFIG['MOZ_BRANDING_DIRECTORY'],
-    '/%s/chat' % CONFIG['commreltopsrcdir']
-]
-
-# Ensure extensions are built after chat/ so purplexpcom can build.
-if CONFIG['MOZ_EXTENSIONS']:
-    DIRS += ['/extensions']
-
-DIRS += ['/%s/im' % CONFIG['commreltopsrcdir']]
deleted file mode 100644
--- a/im/app/Makefile.in
+++ /dev/null
@@ -1,222 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-AB_CD = $(MOZ_UI_LOCALE)
-
-GRE_MILESTONE = $(shell $(PYTHON) $(moztopsrcdir)/config/printconfigsetting.py $(DIST)/bin/platform.ini Build Milestone)
-MOZ_BUILDID = $(shell $(PYTHON) $(moztopsrcdir)/config/printconfigsetting.py $(DIST)/bin/platform.ini Build BuildID)
-
-LICENSE_TXT_FILE = $(commtopsrcdir)/im/LICENSE.txt
-
-DEFINES += \
-  -DINSTANTBIRD_ICO=\"$(DIST)/branding/instantbird.ico\" \
-   $(NULL)
-
-# Build a binary bootstrapping with XRE_main
-
-ifndef MOZ_WINCONSOLE
-ifdef MOZ_DEBUG
-MOZ_WINCONSOLE = 1
-else
-MOZ_WINCONSOLE = 0
-endif
-endif
-
-# This switches $(INSTALL) to copy mode, like $(SYSINSTALL), so things that
-# shouldn't get 755 perms need $(IFLAGS1) for either way of calling nsinstall.
-NSDISTMODE = copy
-
-include $(moztopsrcdir)/config/config.mk
-
-# If we are trying to show an error dialog about the lack of SSE2 support,
-# make sure that code itself doesn't use SSE2.
-ifdef MOZ_LINUX_32_SSE2_STARTUP_ERROR
-CXXFLAGS := $(filter-out -march=% -msse -msse2 -mfpmath=sse,$(CXXFLAGS))
-CXX := $(filter-out -march=% -msse -msse2 -mfpmath=sse,$(CXX))
-CXXFLAGS += -mno-sse -mno-sse2 -mfpmath=387
-CXX += -march=pentiumpro
-endif
-
-ifeq ($(OS_ARCH),WINNT)
-# png to ico converter. The function takes 5 arguments, in order: source png
-# file, left, top, size, output ico file.
-png2ico = $(PYTHON) $(srcdir)/png2ico.py $(1) $(2) $(3) $(4) $(5)
-
-# Extract the icons we care about embedding into the EXE
-available-16.ico: $(commtopsrcdir)/chat/themes/available-16.png $(srcdir)/png2ico.py
-	$(call png2ico,$(commtopsrcdir)/chat/themes/available-16.png,0,0,16,available-16.ico)
-
-away-16.ico: $(commtopsrcdir)/chat/themes/away-16.png $(srcdir)/png2ico.py
-	$(call png2ico,$(commtopsrcdir)/chat/themes/away-16.png,0,0,16,away-16.ico)
-
-offline-16.ico: $(commtopsrcdir)/chat/themes/offline-16.png $(srcdir)/png2ico.py
-	$(call png2ico,$(commtopsrcdir)/chat/themes/offline-16.png,0,0,16,offline-16.ico)
-
-embedded-icons:: available-16.ico away-16.ico offline-16.ico
-GARBAGE += available-16.ico away-16.ico offline-16.ico
-
-# Rebuild instantbird.exe if the manifest changes - it's included by splash.rc.
-# (this dependency should really be just for instantbird.exe, not other targets)
-# Note the manifest file exists in the tree, so we use the explicit filename
-# here.
-EXTRA_DEPS += instantbird.exe.manifest
-endif
-
-include $(moztopsrcdir)/config/rules.mk
-
-ifeq ($(OS_ARCH),WINNT)
-
-$(RESFILE): embedded-icons
-
-endif
-
-ifneq ($(OS_ARCH),WINNT)
-libs::
-	cp -p $(MOZ_APP_NAME)$(BIN_SUFFIX) $(DIST)/bin/$(MOZ_APP_NAME)-bin$(BIN_SUFFIX)
-
-GARBAGE += $(addprefix $(DIST)/bin/defaults/pref/, all.js all-instantbird.js channel-prefs.js chat-prefs.js)
-endif # ! WinNT
-
-ifneq (,$(filter windows gtk gtk2 gtk3,$(MOZ_WIDGET_TOOLKIT)))
-ifneq (,$(filter windows,$(MOZ_WIDGET_TOOLKIT)))
-ICON_SUFFIX=.ico
-else
-ICON_SUFFIX=.png
-endif
-
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-ICON_DIR=gtk
-else
-ICON_DIR=$(MOZ_WIDGET_TOOLKIT)
-endif
-
-DESKTOP_ICONS = \
-	$(NULL)
-
-BRANDED_ICONS = \
-	blistWindow \
-	convWindow \
-	default \
-	$(NULL)
-
-ifeq ($(ICON_DIR),gtk)
-DESKTOP_ICONS_SMALL=$(patsubst %,%16,$(DESKTOP_ICONS))
-DESKTOP_ICONS_LARGE=$(patsubst %,%48,$(DESKTOP_ICONS))
-BRANDED_ICONS_SMALL=$(patsubst %,%16,$(BRANDED_ICONS))
-BRANDED_ICONS_LARGE=$(patsubst %,%48,$(BRANDED_ICONS))
-endif
-
-DESKTOP_ICON_FILES = $(addsuffix $(ICON_SUFFIX), $(DESKTOP_ICONS) $(DESKTOP_ICONS_SMALL) $(DESKTOP_ICONS_LARGE))
-BRANDED_ICON_FILES = $(addsuffix $(ICON_SUFFIX), $(BRANDED_ICONS) $(BRANDED_ICONS_SMALL) $(BRANDED_ICONS_LARGE))
-
-#libs:: $(addprefix icons/$(ICON_DIR)/,$(DESKTOP_ICON_FILES))
-#	$(INSTALL) $^ $(DIST)/bin/chrome/icons/default
-
-libs:: $(addprefix $(DIST)/branding/,$(BRANDED_ICON_FILES))
-	$(INSTALL) $(IFLAGS1) $^ $(DIST)/bin/chrome/icons/default
-endif
-
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-libs::
-	$(INSTALL) $(IFLAGS1) $(DIST)/branding/default16.png $(DIST)/bin/chrome/icons/default
-endif
-
-ifneq (,$(filter-out WINNT Darwin,$(OS_ARCH)))
-GARBAGE += $(MOZ_APP_NAME)
-GARBAGE += $(addprefix $(DIST)/bin/defaults/pref/, all.js all-instantbird.js channel-prefs.js)
-endif
-
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-ICON_FILES	= \
-		$(DIST)/branding/default16.png \
-		$(DIST)/branding/mozicon128.png \
-		$(DIST)/branding/mozicon50.xpm \
-		$(DIST)/branding/mozicon16.xpm \
-		$(NULL)
-
-libs::
-	$(INSTALL) $(IFLAGS1) $(ICON_FILES) $(DIST)/bin/icons
-endif
-
-ifdef MOZ_SPLASHSCREEN
-ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
-libs::
-	if test -f $(DIST)/branding/splash.bmp; then \
-	  $(INSTALL) $(IFLAGS1) $(DIST)/branding/splash.bmp $(DIST)/bin; \
-        fi
-endif
-endif
-
-libs:: $(LICENSE_TXT_FILE)
-ifeq ($(OS_ARCH),WINNT)
-	$(EXIT_ON_ERROR) \
-	for file in $^; do \
-	$(PERL) -pe 's/(?<!\r)\n/\r\n/g;' < $$file > $(FINAL_TARGET)/`basename $$file`; \
-	done
-else
-	$(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)
-endif
-
-module.ver: module.ver.in $(DEPTH)/config/autoconf.mk
-	sed 's/@''MODULE_PRODUCTVERSION@/'`echo $(INSTANTBIRD_VERSION) | sed 's/[a-z].*//; s/\./,/g; s/^\([0-9]*,[0-9]*\)$$/\1,0/; s/^\([0-9]*,[0-9]*,[0-9]*\)$$/\1,0/'`'/;s/@''MODULE_PRODUCTVERSION_STRING@/$(INSTANTBIRD_VERSION)/' $< > $@
-
-_RC_STRING += -SRCDIR .
-module.rc: module.ver
-
-GARBAGE += module.ver
-
-libs:: $(srcdir)/profile/prefs.js
-	$(INSTALL) $(IFLAGS1) $^ $(DIST)/bin/defaults/profile
-
-ifdef ENABLE_TESTS
-# XXX This is a hack to ensure that we get the right xpcshell.ini for our tests.
-# mozilla-central does this in testing/xpcshell-tests which means that it is very
-# hard for anyone to specify anything else.
-libs::
-	$(INSTALL) $(IFLAGS1) $(commtopsrcdir)/im/test/xpcshell.ini $(DEPTH)/_tests/xpcshell
-	cp $(commtopsrcdir)/im/test/xpcshell.ini $(DEPTH)/_tests/xpcshell/all-test-dirs.list
-endif
-
-libs:: $(commtopsrcdir)/mail/app/blocklist.xml
-	$(INSTALL) $(IFLAGS1) $^ $(DIST)/bin
-
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-
-MAC_APP_NAME = $(MOZ_APP_DISPLAYNAME)
-
-ifdef MOZ_DEBUG
-MAC_APP_NAME := $(MAC_APP_NAME)Debug
-endif
-
-LOWER_MAC_APP_NAME = $(shell echo $(MAC_APP_NAME) | tr '[A-Z]' '[a-z]')
-
-AB_CD = $(MOZ_UI_LOCALE)
-
-ifeq (zh-TW,$(AB_CD))
-LPROJ_ROOT := $(subst -,_,$(AB_CD))
-else
-LPROJ_ROOT := $(firstword $(subst -, ,$(AB_CD)))
-endif
-LPROJ := Contents/Resources/$(LPROJ_ROOT).lproj
-
-clean clobber repackage::
-	$(RM) -r $(DIST)/$(MOZ_MACBUNDLE_NAME)
-
-tools repackage:: $(PROGRAM)
-	$(MKDIR) -p $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS
-	rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents $(DIST)/$(MOZ_MACBUNDLE_NAME) --exclude English.lproj
-	$(MKDIR) -p $(DIST)/$(MOZ_MACBUNDLE_NAME)/$(LPROJ)
-	rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents/Resources/English.lproj/ $(DIST)/$(MOZ_MACBUNDLE_NAME)/$(LPROJ)
-	sed -e 's/%APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' -e 's/%LOWER_MAC_APP_NAME%/$(LOWER_MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Info.plist.in > $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/Info.plist
-	sed -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > $(DIST)/$(MOZ_MACBUNDLE_NAME)/$(LPROJ)/InfoPlist.strings
-	rsync -a --exclude-from='$(srcdir)/macbuild/Contents/MacOS-files.in' $(DIST)/bin/ $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/Resources
-	rsync -a --include-from='$(srcdir)/macbuild/Contents/MacOS-files.in' --exclude '*' $(DIST)/bin/ $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS
-	$(RM) $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS/$(PROGRAM)
-	rsync -aL $(PROGRAM) $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS
-	cp -RL $(DIST)/branding/instantbird.icns $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/Resources/instantbird.icns
-	printf APPLMOZM > $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/PkgInfo
-endif
-
-# Note that anything you do to dist/ down here isn't going to make it into the
-# Mac build, since it's already been copied over to the .app, above.
deleted file mode 100644
--- a/im/app/application.ini
+++ /dev/null
@@ -1,31 +0,0 @@
-; This Source Code Form is subject to the terms of the Mozilla Public
-; License, v. 2.0. If a copy of the MPL was not distributed with this
-; file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#filter substitution
-[App]
-Name=Instantbird
-Version=@APP_VERSION@
-BuildID=@MOZ_BUILDID@
-#ifdef MOZ_SOURCE_REPO
-SourceRepository=@MOZ_SOURCE_REPO@
-#endif
-#ifdef MOZ_SOURCE_STAMP
-SourceStamp=@MOZ_SOURCE_STAMP@
-#endif
-Copyright=Copyright (c) 2007-2015 Contributors
-ID={33cb9019-c295-46dd-be21-8c4936574bee}
-
-[Gecko]
-MinVersion=@GRE_MILESTONE@
-MaxVersion=@GRE_MILESTONE@
-
-[XRE]
-EnableExtensionManager=1
-EnableProfileMigrator=1
-
-[Crash Reporter]
-#if MOZILLA_OFFICIAL
-Enabled=1
-#endif
-ServerURL=https://crash-reporter.instantbird.org/submit/
deleted file mode 100644
--- a/im/app/instantbird.exe.manifest
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-<assemblyIdentity
-        version="1.0.0.0"
-        processorArchitecture="*"
-        name="Instantbird"
-        type="win32"
-/>
-<description>Instantbird</description>
-<dependency>
-        <dependentAssembly>
-                <assemblyIdentity
-                        type="win32"
-                        name="Microsoft.Windows.Common-Controls"
-                        version="6.0.0.0"
-                        processorArchitecture="*"
-                        publicKeyToken="6595b64144ccf1df"
-                        language="*"
-                />
-        </dependentAssembly>
-</dependency>
-<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
-  <ms_asmv3:security>
-    <ms_asmv3:requestedPrivileges>
-      <ms_asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
-    </ms_asmv3:requestedPrivileges>
-  </ms_asmv3:security>
-</ms_asmv3:trustInfo>
-  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
-    <application>
-      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
-      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
-      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
-      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
-    </application>
-  </compatibility>
-</assembly>
deleted file mode 100644
--- a/im/app/macbuild/Contents/Info.plist.in
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>instantbird</string>
-	<key>CFBundleGetInfoString</key>
-	<string>%MAC_APP_NAME% %APP_VERSION%, © 1998-2015 Contributors</string>
-	<key>CFBundleIconFile</key>
-	<string>instantbird.icns</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.instantbird</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>%MAC_APP_NAME%</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>%APP_VERSION%</string>
-	<key>CFBundleSignature</key>
-	<string>MOZM</string>
-	<key>CFBundleVersion</key>
-	<string>%APP_VERSION%</string>
-	<key>NSAppleScriptEnabled</key>
-	<true/>
-	<key>LSMinimumSystemVersion</key>
-	<string>10.9.0</string>
-	<key>NSSupportsAutomaticGraphicsSwitching</key>
-	<true/>
-	<key>NSDisablePersistence</key>
-	<true/>
-	<key>NSPrincipalClass</key>
-	<string>GeckoNSApplication</string>
-</dict>
-</plist>
deleted file mode 100644
--- a/im/app/macbuild/Contents/MacOS-files.in
+++ /dev/null
@@ -1,9 +0,0 @@
-/*.app/***
-/*.dylib
-/certutil
-/instantbird-bin
-/pingsender
-/pk12util
-/ssltunnel
-/xpcshell
-/XUL
deleted file mode 100644
--- a/im/app/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in
+++ /dev/null
@@ -1,5 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-CFBundleName = "%MAC_APP_NAME%";
deleted file mode 100644
--- a/im/app/module.ver.in
+++ /dev/null
@@ -1,9 +0,0 @@
-WIN32_MODULE_DESCRIPTION=Instantbird
-WIN32_MODULE_PRODUCTNAME=Instantbird
-WIN32_MODULE_NAME=Instantbird
-WIN32_MODULE_PRODUCTVERSION=@MODULE_PRODUCTVERSION@
-WIN32_MODULE_PRODUCTVERSION_STRING=@MODULE_PRODUCTVERSION_STRING@
-WIN32_MODULE_COPYRIGHT=©Instantbird, Mozilla and libpurple Developers, according to the GPL 2.0 license, as applicable.
-WIN32_MODULE_COMPANYNAME=Instantbird
-WIN32_MODULE_TRADEMARKS=Instantbird
-WIN32_MODULE_COMMENT=Instantbird Instant Messaging Client
deleted file mode 100644
--- a/im/app/moz.build
+++ /dev/null
@@ -1,83 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += ['profile']
-
-GeckoProgram(CONFIG['MOZ_APP_NAME'])
-USE_LIBS += ['mozglue']
-SOURCES += ['nsMain.cpp']
-LOCAL_INCLUDES += [
-    '!/build',
-    '/%s/toolkit/xre' % CONFIG['mozreltopsrcdir'],
-    '/%s/xpcom/base' % CONFIG['mozreltopsrcdir'],
-    '/%s/xpcom/build' % CONFIG['mozreltopsrcdir'],
-]
-
-if CONFIG['LIBFUZZER']:
-    USE_LIBS += [ 'fuzzer' ]
-    LOCAL_INCLUDES += [
-        '/%s/tools/fuzzing/libfuzzer' % CONFIG['mozreltopsrcdir'],
-    ]
-
-if CONFIG['OS_ARCH'] == 'WINNT':
-    RCINCLUDE = 'splash.rc'
-    DEFINES['MOZ_INSTANTBIRD'] = True
-
-if CONFIG['MOZ_SANDBOX'] and CONFIG['OS_ARCH'] == 'WINNT':
-    # For sandbox includes and the include dependencies those have
-    LOCAL_INCLUDES += [
-        '/%s/security/sandbox/chromium' % CONFIG['mozreltopsrcdir'],
-        '/%s/security/sandbox/chromium-shim' % CONFIG['mozreltopsrcdir'],
-    ]
-
-    USE_LIBS += [
-        'sandbox_s',
-    ]
-
-    DELAYLOAD_DLLS += [
-        'winmm.dll',
-        'user32.dll',
-    ]
-
-if CONFIG['_MSC_VER']:
-    # Always enter a Windows program through wmain, whether or not we're
-    # a console application.
-    WIN32_EXE_LDFLAGS += ['-ENTRY:wmainCRTStartup']
-
-# Control the default heap size.
-# This is the heap returned by GetProcessHeap().
-# As we use the CRT heap, the default size is too large and wastes VM.
-#
-# The default heap size is 1MB on Win32.
-# The heap will grow if need be.
-#
-# Set it to 256k.  See bug 127069.
-if CONFIG['OS_ARCH'] == 'WINNT' and not CONFIG['GNU_CC']:
-    LDFLAGS += ['/HEAP:0x40000']
-
-if CONFIG['MOZ_LINKER']:
-    OS_LIBS += CONFIG['MOZ_ZLIB_LIBS']
-
-if CONFIG['HAVE_CLOCK_MONOTONIC']:
-    OS_LIBS += CONFIG['REALTIME_LIBS']
-
-DEFINES['APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
-
-if CONFIG['MOZILLA_OFFICIAL']:
-    DEFINES['MOZILLA_OFFICIAL'] = True
-
-if CONFIG['MOZ_GPSD']:
-    DEFINES['MOZ_GPSD'] = True
-
-if CONFIG['MOZ_LINUX_32_SSE2_STARTUP_ERROR']:
-    DEFINES['MOZ_LINUX_32_SSE2_STARTUP_ERROR'] = True
-
-DisableStlWrapping()
-
-JS_PREFERENCE_PP_FILES += [
-    'profile/all-instantbird.js',
-    'profile/channel-prefs.js',
-]
-
deleted file mode 100644
--- a/im/app/nsMain.cpp
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsXULAppAPI.h"
-#include "mozilla/XREAppData.h"
-#include "application.ini.h"
-#include "mozilla/Bootstrap.h"
-#if defined(XP_WIN)
-#include <windows.h>
-#include <stdlib.h>
-#elif defined(XP_UNIX)
-#include <sys/resource.h>
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <time.h>
-
-#include "nsCOMPtr.h"
-#include "nsIFile.h"
-
-#ifdef XP_WIN
-#define XRE_WANT_ENVIRON
-#define strcasecmp _stricmp
-#ifdef MOZ_SANDBOX
-#include "mozilla/sandboxing/SandboxInitialization.h"
-#endif
-#endif
-#include "BinaryPath.h"
-
-#include "nsXPCOMPrivate.h" // for MAXPATHLEN and XPCOM_DLL
-
-#include "mozilla/Sprintf.h"
-#include "mozilla/StartupTimeline.h"
-#include "mozilla/WindowsDllBlocklist.h"
-
-#ifdef LIBFUZZER
-#include "FuzzerDefs.h"
-#endif
-
-#ifdef MOZ_LINUX_32_SSE2_STARTUP_ERROR
-#include <cpuid.h>
-#include "mozilla/Unused.h"
-
-static bool
-IsSSE2Available()
-{
-  // The rest of the app has been compiled to assume that SSE2 is present
-  // unconditionally, so we can't use the normal copy of SSE.cpp here.
-  // Since SSE.cpp caches the results and we need them only transiently,
-  // instead of #including SSE.cpp here, let's just inline the specific check
-  // that's needed.
-  unsigned int level = 1u;
-  unsigned int eax, ebx, ecx, edx;
-  unsigned int bits = (1u<<26);
-  unsigned int max = __get_cpuid_max(0, nullptr);
-  if (level > max) {
-    return false;
-  }
-  __cpuid_count(level, 0, eax, ebx, ecx, edx);
-  return (edx & bits) == bits;
-}
-
-static const char sSSE2Message[] =
-    "This browser version requires a processor with the SSE2 instruction "
-    "set extension.\nYou may be able to obtain a version that does not "
-    "require SSE2 from your Linux distribution.\n";
-
-__attribute__((constructor))
-static void
-SSE2Check()
-{
-  if (IsSSE2Available()) {
-    return;
-  }
-  // Using write() in order to avoid jemalloc-based buffering. Ignoring return
-  // values, since there isn't much we could do on failure and there is no
-  // point in trying to recover from errors.
-  MOZ_UNUSED(write(STDERR_FILENO,
-                   sSSE2Message,
-                   MOZ_ARRAY_LENGTH(sSSE2Message) - 1));
-  // _exit() instead of exit() to avoid running the usual "at exit" code.
-  _exit(255);
-}
-#endif
-
-#if !defined(MOZ_WIDGET_COCOA) && !defined(MOZ_WIDGET_ANDROID)
-#define MOZ_BROWSER_CAN_BE_CONTENTPROC
-#include "../../mozilla/ipc/contentproc/plugin-container.cpp"
-#endif
-
-using namespace mozilla;
-
-#ifdef XP_MACOSX
-#define kOSXResourcesFolder "Resources"
-#endif
-#define kDesktopFolder ""
-
-static MOZ_FORMAT_PRINTF(1, 2) void Output(const char *fmt, ... )
-{
-  va_list ap;
-  va_start(ap, fmt);
-
-#ifndef XP_WIN
-  vfprintf(stderr, fmt, ap);
-#else
-  char msg[2048];
-  vsnprintf_s(msg, _countof(msg), _TRUNCATE, fmt, ap);
-
-  wchar_t wide_msg[2048];
-  MultiByteToWideChar(CP_UTF8,
-                      0,
-                      msg,
-                      -1,
-                      wide_msg,
-                      _countof(wide_msg));
-#if MOZ_WINCONSOLE
-  fwprintf_s(stderr, wide_msg);
-#else
-  // Linking user32 at load-time interferes with the DLL blocklist (bug 932100).
-  // This is a rare codepath, so we can load user32 at run-time instead.
-  HMODULE user32 = LoadLibraryW(L"user32.dll");
-  if (user32) {
-    decltype(MessageBoxW)* messageBoxW =
-      (decltype(MessageBoxW)*) GetProcAddress(user32, "MessageBoxW");
-    if (messageBoxW) {
-      messageBoxW(nullptr, wide_msg, L"Instantbird", MB_OK
-                                                   | MB_ICONERROR
-                                                   | MB_SETFOREGROUND);
-    }
-    FreeLibrary(user32);
-  }
-#endif
-#endif
-
-  va_end(ap);
-}
-
-/**
- * Return true if |arg| matches the given argument name.
- */
-static bool IsArg(const char* arg, const char* s)
-{
-  if (*arg == '-')
-  {
-    if (*++arg == '-')
-      ++arg;
-    return !strcasecmp(arg, s);
-  }
-
-#if defined(XP_WIN)
-  if (*arg == '/')
-    return !strcasecmp(++arg, s);
-#endif
-
-  return false;
-}
-
-Bootstrap::UniquePtr gBootstrap;
-
-static int do_main(int argc, char* argv[], char* envp[])
-{
-
-  // Allow instantbird.exe to launch XULRunner apps via -app <application.ini>
-  // Note that -app must be the *first* argument.
-  const char *appDataFile = getenv("XUL_APP_FILE");
-  if ((!appDataFile || !*appDataFile) &&
-      (argc > 1 && IsArg(argv[1], "app"))) {
-    if (argc == 2) {
-      Output("Incorrect number of arguments passed to -app");
-      return 255;
-    }
-    appDataFile = argv[2];
-
-    char appEnv[MAXPATHLEN];
-    SprintfLiteral(appEnv, "XUL_APP_FILE=%s", argv[2]);
-    if (putenv(strdup(appEnv))) {
-      Output("Couldn't set %s.\n", appEnv);
-      return 255;
-    }
-    argv[2] = argv[0];
-    argv += 2;
-    argc -= 2;
-  } else if (argc > 1 && IsArg(argv[1], "xpcshell")) {
-    for (int i = 1; i < argc; i++) {
-      argv[i] = argv[i + 1];
-    }
-
-    XREShellData shellData;
-#if defined(XP_WIN) && defined(MOZ_SANDBOX)
-    shellData.sandboxBrokerServices =
-      sandboxing::GetInitializedBrokerServices();
-#endif
-
-    return gBootstrap->XRE_XPCShellMain(--argc, argv, envp, &shellData);
-  }
-
-  BootstrapConfig config;
-
-  if (appDataFile && *appDataFile) {
-    config.appData = nullptr;
-    config.appDataPath = appDataFile;
-  } else {
-    // no -app flag so we use the compiled-in app data
-    config.appData = &sAppData;
-    config.appDataPath = kDesktopFolder;
-  }
-
-#if defined(XP_WIN) && defined(MOZ_SANDBOX)
-  sandbox::BrokerServices* brokerServices =
-    sandboxing::GetInitializedBrokerServices();
-  sandboxing::PermissionsService* permissionsService =
-    sandboxing::GetPermissionsService();
-#if defined(MOZ_CONTENT_SANDBOX)
-  if (!brokerServices) {
-    Output("Couldn't initialize the broker services.\n");
-    return 255;
-  }
-#endif
-  config.sandboxBrokerServices = brokerServices;
-  config.sandboxPermissionsService = permissionsService;
-#endif
-
-#ifdef LIBFUZZER
-  if (getenv("LIBFUZZER"))
-    gBootstrap->XRE_LibFuzzerSetDriver(fuzzer::FuzzerDriver);
-#endif
-
-  return gBootstrap->XRE_main(argc, argv, config);
-}
-
-static nsresult
-InitXPCOMGlue()
-{
-  UniqueFreePtr<char> exePath = BinaryPath::Get();
-  if (!exePath) {
-    Output("Couldn't find the application directory.\n");
-    return NS_ERROR_FAILURE;
-  }
-
-  gBootstrap = mozilla::GetBootstrap(exePath.get());
-  if (!gBootstrap) {
-    Output("Couldn't load XPCOM.\n");
-    return NS_ERROR_FAILURE;
-  }
-
-  // This will set this thread as the main thread.
-  gBootstrap->NS_LogInit();
-
-  return NS_OK;
-}
-
-int main(int argc, char* argv[], char* envp[])
-{
-  mozilla::TimeStamp start = mozilla::TimeStamp::Now();
-
-#ifdef MOZ_BROWSER_CAN_BE_CONTENTPROC
-  // We are launching as a content process, delegate to the appropriate
-  // main
-  if (argc > 1 && IsArg(argv[1], "contentproc")) {
-#ifdef HAS_DLL_BLOCKLIST
-    DllBlocklist_Initialize(eDllBlocklistInitFlagIsChildProcess);
-#endif
-#if defined(XP_WIN) && defined(MOZ_SANDBOX)
-    // We need to initialize the sandbox TargetServices before InitXPCOMGlue
-    // because we might need the sandbox broker to give access to some files.
-    if (IsSandboxedProcess() && !sandboxing::GetInitializedTargetServices()) {
-      Output("Failed to initialize the sandbox target services.");
-      return 255;
-    }
-#endif
-
-    nsresult rv = InitXPCOMGlue();
-    if (NS_FAILED(rv)) {
-      return 255;
-    }
-
-    int result = content_process_main(gBootstrap.get(), argc, argv);
-
-    // InitXPCOMGlue calls NS_LogInit, so we need to balance it here.
-    gBootstrap->NS_LogTerm();
-
-    return result;
-  }
-#endif
-
-#ifdef HAS_DLL_BLOCKLIST
-  DllBlocklist_Initialize();
-#endif
-
-
-  nsresult rv = InitXPCOMGlue();
-  if (NS_FAILED(rv)) {
-    return 255;
-  }
-
-  gBootstrap->XRE_StartupTimelineRecord(mozilla::StartupTimeline::START, start);
-
-#ifdef MOZ_BROWSER_CAN_BE_CONTENTPROC
-  gBootstrap->XRE_EnableSameExecutableForContentProc();
-#endif
-
-  int result = do_main(argc, argv, envp);
-
-  gBootstrap->NS_LogTerm();
-
-#ifdef XP_MACOSX
-  // Allow writes again. While we would like to catch writes from static
-  // destructors to allow early exits to use _exit, we know that there is
-  // at least one such write that we don't control (see bug 826029). For
-  // now we enable writes again and early exits will have to use exit instead
-  // of _exit.
-  gBootstrap->XRE_StopLateWriteChecks();
-#endif
-
-  gBootstrap.reset();
-
-  return result;
-}
deleted file mode 100644
--- a/im/app/png.py
+++ /dev/null
@@ -1,3785 +0,0 @@
-#!/usr/bin/env python
-
-# $URL: http://pypng.googlecode.com/svn/trunk/code/png.py $
-# $Rev: 228 $
-
-# png.py - PNG encoder/decoder in pure Python
-#
-# Copyright (C) 2006 Johann C. Rocholl <johann@browsershots.org>
-# Portions Copyright (C) 2009 David Jones <drj@pobox.com>
-# And probably portions Copyright (C) 2006 Nicko van Someren <nicko@nicko.org>
-#
-# Original concept by Johann C. Rocholl.
-#
-# LICENSE (The MIT License)
-#
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this software and associated documentation files
-# (the "Software"), to deal in the Software without restriction,
-# including without limitation the rights to use, copy, modify, merge,
-# publish, distribute, sublicense, and/or sell copies of the Software,
-# and to permit persons to whom the Software is furnished to do so,
-# subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-#
-# Changelog (recent first):
-# 2009-03-11 David: interlaced bit depth < 8 (writing).
-# 2009-03-10 David: interlaced bit depth < 8 (reading).
-# 2009-03-04 David: Flat and Boxed pixel formats.
-# 2009-02-26 David: Palette support (writing).
-# 2009-02-23 David: Bit-depths < 8; better PNM support.
-# 2006-06-17 Nicko: Reworked into a class, faster interlacing.
-# 2006-06-17 Johann: Very simple prototype PNG decoder.
-# 2006-06-17 Nicko: Test suite with various image generators.
-# 2006-06-17 Nicko: Alpha-channel, grey-scale, 16-bit/plane support.
-# 2006-06-15 Johann: Scanline iterator interface for large input files.
-# 2006-06-09 Johann: Very simple prototype PNG encoder.
-
-# Incorporated into Bangai-O Development Tools by drj on 2009-02-11 from
-# http://trac.browsershots.org/browser/trunk/pypng/lib/png.py?rev=2885
-
-# Incorporated into pypng by drj on 2009-03-12 from
-# //depot/prj/bangaio/master/code/png.py#67
-
-
-"""
-Pure Python PNG Reader/Writer
-
-This Python module implements support for PNG images (see PNG
-specification at http://www.w3.org/TR/2003/REC-PNG-20031110/ ). It reads
-and writes PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64
-bits per pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB,
-RGBA, LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
-images (1/2/4/8 bit).  Adam7 interlacing is supported for reading and
-writing.  A number of optional chunks can be specified (when writing)
-and understood (when reading): ``tRNS``, ``bKGD``, ``gAMA``.
-
-For help, type ``import png; help(png)`` in your python interpreter.
-
-A good place to start is the :class:`Reader` and :class:`Writer` classes.
-
-Requires Python 2.3.  Limited support is available for Python 2.2, but
-not everything works.  Best with Python 2.4 and higher.  Installation is
-trivial, but see the ``README.txt`` file (with the source distribution)
-for details.
-
-This file can also be used as a command-line utility to convert
-`Netpbm <http://netpbm.sourceforge.net/>`_ PNM files to PNG, and the reverse conversion from PNG to
-PNM. The interface is similar to that of the ``pnmtopng`` program from
-Netpbm.  Type ``python png.py --help`` at the shell prompt
-for usage and a list of options.
-
-A note on spelling and terminology
-----------------------------------
-
-Generally British English spelling is used in the documentation.  So
-that's "greyscale" and "colour".  This not only matches the author's
-native language, it's also used by the PNG specification.
-
-The major colour models supported by PNG (and hence by PyPNG) are:
-greyscale, RGB, greyscale--alpha, RGB--alpha.  These are sometimes
-referred to using the abbreviations: L, RGB, LA, RGBA.  In this case
-each letter abbreviates a single channel: *L* is for Luminance or Luma or
-Lightness which is the channel used in greyscale images; *R*, *G*, *B* stand
-for Red, Green, Blue, the components of a colour image; *A* stands for
-Alpha, the opacity channel (used for transparency effects, but higher
-values are more opaque, so it makes sense to call it opacity).
-
-A note on formats
------------------
-
-When getting pixel data out of this module (reading) and presenting
-data to this module (writing) there are a number of ways the data could
-be represented as a Python value.  Generally this module uses one of
-three formats called "flat row flat pixel", "boxed row flat pixel", and
-"boxed row boxed pixel".  Basically the concern is whether each pixel
-and each row comes in its own little tuple (box), or not.
-
-Consider an image that is 3 pixels wide by 2 pixels high, and each pixel
-has RGB components:
-
-Boxed row flat pixel::
-
-  list([R,G,B, R,G,B, R,G,B],
-       [R,G,B, R,G,B, R,G,B])
-
-Each row appears as its own list, but the pixels are flattened so that
-three values for one pixel simply follow the three values for the previous
-pixel.  This is the most common format used, because it provides a good
-compromise between space and convenience.  PyPNG regards itself as
-at liberty to replace any sequence type with any sufficiently compatible
-other sequence type; in practice each row is an array (from the array
-module), and the outer list is sometimes an iterator rather than an
-explicit list (so that streaming is possible).
-
-Flat row flat pixel::
-
-  [R,G,B, R,G,B, R,G,B,
-   R,G,B, R,G,B, R,G,B]
-
-The entire image is one single giant sequence of colour values.
-Generally an array will be used (to save space), not a list.
-
-Boxed row boxed pixel::
-
-  list([ (R,G,B), (R,G,B), (R,G,B) ],
-       [ (R,G,B), (R,G,B), (R,G,B) ])
-
-Each row appears in its own list, but each pixel also appears in its own
-tuple.  A serious memory burn in Python.
-
-In all cases the top row comes first, and for each row the pixels are
-ordered from left-to-right.  Within a pixel the values appear in the
-order, R-G-B-A (or L-A for greyscale--alpha).
-
-There is a fourth format, mentioned because it is used internally,
-is close to what lies inside a PNG file itself, and has some support
-from the public API.  This format is called packed.  When packed,
-each row is a sequence of bytes (integers from 0 to 255), just as
-it is before PNG scanline filtering is applied.  When the bit depth
-is 8 this is essentially the same as boxed row flat pixel; when the
-bit depth is less than 8, several pixels are packed into each byte;
-when the bit depth is 16 (the only value more than 8 that is supported
-by the PNG image format) each pixel value is decomposed into 2 bytes
-(and `packed` is a misnomer).  This format is used by the
-:meth:`Writer.write_packed` method.  It isn't usually a convenient
-format, but may be just right if the source data for the PNG image
-comes from something that uses a similar format (for example, 1-bit
-BMPs, or another PNG file).
-
-And now, my famous members
---------------------------
-"""
-
-# http://www.python.org/doc/2.2.3/whatsnew/node5.html
-from __future__ import generators
-
-__version__ = "$URL: http://pypng.googlecode.com/svn/trunk/code/png.py $ $Rev: 228 $"
-
-from array import array
-try: # See :pyver:old
-    import itertools
-except:
-    pass
-import math
-# http://www.python.org/doc/2.4.4/lib/module-operator.html
-import operator
-import struct
-import sys
-import zlib
-# http://www.python.org/doc/2.4.4/lib/module-warnings.html
-import warnings
-
-
-__all__ = ['Image', 'Reader', 'Writer', 'write_chunks', 'from_array']
-
-
-# The PNG signature.
-# http://www.w3.org/TR/PNG/#5PNG-file-signature
-_signature = struct.pack('8B', 137, 80, 78, 71, 13, 10, 26, 10)
-
-_adam7 = ((0, 0, 8, 8),
-          (4, 0, 8, 8),
-          (0, 4, 4, 8),
-          (2, 0, 4, 4),
-          (0, 2, 2, 4),
-          (1, 0, 2, 2),
-          (0, 1, 1, 2))
-
-def group(s, n):
-    # See
-    # http://www.python.org/doc/2.6/library/functions.html#zip
-    return zip(*[iter(s)]*n)
-
-def isarray(x):
-    """Same as ``isinstance(x, array)`` except on Python 2.2, where it
-    always returns ``False``.  This helps PyPNG work on Python 2.2.
-    """
-
-    try:
-        return isinstance(x, array)
-    except:
-        return False
-
-try:  # see :pyver:old
-    array.tostring
-except:
-    def tostring(row):
-        l = len(row)
-        return struct.pack('%dB' % l, *row)
-else:
-    def tostring(row):
-        """Convert row of bytes to string.  Expects `row` to be an
-        ``array``.
-        """
-        return row.tostring()
-
-# Conditionally convert to bytes.  Works on Python 2 and Python 3.
-try:
-    bytes('', 'ascii')
-    def strtobytes(x): return bytes(x, 'iso8859-1')
-    def bytestostr(x): return str(x, 'iso8859-1')
-except:
-    strtobytes = str
-    bytestostr = str
-
-def interleave_planes(ipixels, apixels, ipsize, apsize):
-    """
-    Interleave (colour) planes, e.g. RGB + A = RGBA.
-
-    Return an array of pixels consisting of the `ipsize` elements of data
-    from each pixel in `ipixels` followed by the `apsize` elements of data
-    from each pixel in `apixels`.  Conventionally `ipixels` and
-    `apixels` are byte arrays so the sizes are bytes, but it actually
-    works with any arrays of the same type.  The returned array is the
-    same type as the input arrays which should be the same type as each other.
-    """
-
-    itotal = len(ipixels)
-    atotal = len(apixels)
-    newtotal = itotal + atotal
-    newpsize = ipsize + apsize
-    # Set up the output buffer
-    # See http://www.python.org/doc/2.4.4/lib/module-array.html#l2h-1356
-    out = array(ipixels.typecode)
-    # It's annoying that there is no cheap way to set the array size :-(
-    out.extend(ipixels)
-    out.extend(apixels)
-    # Interleave in the pixel data
-    for i in range(ipsize):
-        out[i:newtotal:newpsize] = ipixels[i:itotal:ipsize]
-    for i in range(apsize):
-        out[i+ipsize:newtotal:newpsize] = apixels[i:atotal:apsize]
-    return out
-
-def check_palette(palette):
-    """Check a palette argument (to the :class:`Writer` class) for validity.
-    Returns the palette as a list if okay; raises an exception otherwise.
-    """
-
-    # None is the default and is allowed.
-    if palette is None:
-        return None
-
-    p = list(palette)
-    if not (0 < len(p) <= 256):
-        raise ValueError("a palette must have between 1 and 256 entries")
-    seen_triple = False
-    for i,t in enumerate(p):
-        if len(t) not in (3,4):
-            raise ValueError(
-              "palette entry %d: entries must be 3- or 4-tuples." % i)
-        if len(t) == 3:
-            seen_triple = True
-        if seen_triple and len(t) == 4:
-            raise ValueError(
-              "palette entry %d: all 4-tuples must precede all 3-tuples" % i)
-        for x in t:
-            if int(x) != x or not(0 <= x <= 255):
-                raise ValueError(
-                  "palette entry %d: values must be integer: 0 <= x <= 255" % i)
-    return p
-
-class Error(Exception):
-    prefix = 'Error'
-    def __str__(self):
-        return self.prefix + ': ' + ' '.join(self.args)
-
-class FormatError(Error):
-    """Problem with input file format.  In other words, PNG file does
-    not conform to the specification in some way and is invalid.
-    """
-
-    prefix = 'FormatError'
-
-class ChunkError(FormatError):
-    prefix = 'ChunkError'
-
-
-class Writer:
-    """
-    PNG encoder in pure Python.
-    """
-
-    def __init__(self, width=None, height=None,
-                 size=None,
-                 greyscale=False,
-                 alpha=False,
-                 bitdepth=8,
-                 palette=None,
-                 transparent=None,
-                 background=None,
-                 gamma=None,
-                 compression=None,
-                 interlace=False,
-                 bytes_per_sample=None, # deprecated
-                 planes=None,
-                 colormap=None,
-                 maxval=None,
-                 chunk_limit=2**20):
-        """
-        Create a PNG encoder object.
-
-        Arguments:
-
-        width, height
-          Image size in pixels, as two separate arguments.
-        size
-          Image size (w,h) in pixels, as single argument.
-        greyscale
-          Input data is greyscale, not RGB.
-        alpha
-          Input data has alpha channel (RGBA or LA).
-        bitdepth
-          Bit depth: from 1 to 16.
-        palette
-          Create a palette for a colour mapped image (colour type 3).
-        transparent
-          Specify a transparent colour (create a ``tRNS`` chunk).
-        background
-          Specify a default background colour (create a ``bKGD`` chunk).
-        gamma
-          Specify a gamma value (create a ``gAMA`` chunk).
-        compression
-          zlib compression level (1-9).
-        interlace
-          Create an interlaced image.
-        chunk_limit
-          Write multiple ``IDAT`` chunks to save memory.
-
-        The image size (in pixels) can be specified either by using the
-        `width` and `height` arguments, or with the single `size`
-        argument.  If `size` is used it should be a pair (*width*,
-        *height*).
-
-        `greyscale` and `alpha` are booleans that specify whether
-        an image is greyscale (or colour), and whether it has an
-        alpha channel (or not).
-
-        `bitdepth` specifies the bit depth of the source pixel values.
-        Each source pixel value must be an integer between 0 and
-        ``2**bitdepth-1``.  For example, 8-bit images have values
-        between 0 and 255.  PNG only stores images with bit depths of
-        1,2,4,8, or 16.  When `bitdepth` is not one of these values,
-        the next highest valid bit depth is selected, and an ``sBIT``
-        (significant bits) chunk is generated that specifies the original
-        precision of the source image.  In this case the supplied pixel
-        values will be rescaled to fit the range of the selected bit depth.
-
-        The details of which bit depth / colour model combinations the
-        PNG file format supports directly, are somewhat arcane
-        (refer to the PNG specification for full details).  Briefly:
-        "small" bit depths (1,2,4) are only allowed with greyscale and
-        colour mapped images; colour mapped images cannot have bit depth
-        16.
-
-        For colour mapped images (in other words, when the `palette`
-        argument is specified) the `bitdepth` argument must match one of
-        the valid PNG bit depths: 1, 2, 4, or 8.  (It is valid to have a
-        PNG image with a palette and an ``sBIT`` chunk, but the meaning
-        is slightly different; it would be awkward to press the
-        `bitdepth` argument into service for this.)
-
-        The `palette` option, when specified, causes a colour mapped image
-        to be created: the PNG colour type is set to 3; greyscale
-        must not be set; alpha must not be set; transparent must
-        not be set; the bit depth must be 1,2,4, or 8.  When a colour
-        mapped image is created, the pixel values are palette indexes
-        and the `bitdepth` argument specifies the size of these indexes
-        (not the size of the colour values in the palette).
-
-        The palette argument value should be a sequence of 3- or
-        4-tuples.  3-tuples specify RGB palette entries; 4-tuples
-        specify RGBA palette entries.  If both 4-tuples and 3-tuples
-        appear in the sequence then all the 4-tuples must come
-        before all the 3-tuples.  A ``PLTE`` chunk is created; if there
-        are 4-tuples then a ``tRNS`` chunk is created as well.  The
-        ``PLTE`` chunk will contain all the RGB triples in the same
-        sequence; the ``tRNS`` chunk will contain the alpha channel for
-        all the 4-tuples, in the same sequence.  Palette entries
-        are always 8-bit.
-
-        If specified, the `transparent` and `background` parameters must
-        be a tuple with three integer values for red, green, blue, or
-        a simple integer (or singleton tuple) for a greyscale image.
-
-        If specified, the `gamma` parameter must be a positive number
-        (generally, a float).  A ``gAMA`` chunk will be created.  Note that
-        this will not change the values of the pixels as they appear in
-        the PNG file, they are assumed to have already been converted
-        appropriately for the gamma specified.
-
-        The `compression` argument specifies the compression level
-        to be used by the ``zlib`` module.  Higher values are likely
-        to compress better, but will be slower to compress.  The
-        default for this argument is ``None``; this does not mean
-        no compression, rather it means that the default from the
-        ``zlib`` module is used (which is generally acceptable).
-
-        If `interlace` is true then an interlaced image is created
-        (using PNG's so far only interace method, *Adam7*).  This does not
-        affect how the pixels should be presented to the encoder, rather
-        it changes how they are arranged into the PNG file.  On slow
-        connexions interlaced images can be partially decoded by the
-        browser to give a rough view of the image that is successively
-        refined as more image data appears.
-        
-        .. note ::
-        
-          Enabling the `interlace` option requires the entire image
-          to be processed in working memory.
-
-        `chunk_limit` is used to limit the amount of memory used whilst
-        compressing the image.  In order to avoid using large amounts of
-        memory, multiple ``IDAT`` chunks may be created.
-        """
-
-        # At the moment the `planes` argument is ignored;
-        # its purpose is to act as a dummy so that
-        # ``Writer(x, y, **info)`` works, where `info` is a dictionary
-        # returned by Reader.read and friends.
-        # Ditto for `colormap`.
-
-        # A couple of helper functions come first.  Best skipped if you
-        # are reading through.
-
-        def isinteger(x):
-            try:
-                return int(x) == x
-            except:
-                return False
-
-        def check_color(c, which):
-            """Checks that a colour argument for transparent or
-            background options is the right form.  Also "corrects" bare
-            integers to 1-tuples.
-            """
-
-            if c is None:
-                return c
-            if greyscale:
-                try:
-                    l = len(c)
-                except TypeError:
-                    c = (c,)
-                if len(c) != 1:
-                    raise ValueError("%s for greyscale must be 1-tuple" %
-                        which)
-                if not isinteger(c[0]):
-                    raise ValueError(
-                        "%s colour for greyscale must be integer" %
-                        which)
-            else:
-                if not (len(c) == 3 and
-                        isinteger(c[0]) and
-                        isinteger(c[1]) and
-                        isinteger(c[2])):
-                    raise ValueError(
-                        "%s colour must be a triple of integers" %
-                        which)
-            return c
-
-        if size:
-            if len(size) != 2:
-                raise ValueError(
-                  "size argument should be a pair (width, height)")
-            if width is not None and width != size[0]:
-                raise ValueError(
-                  "size[0] (%r) and width (%r) should match when both are used."
-                    % (size[0], width))
-            if height is not None and height != size[1]:
-                raise ValueError(
-                  "size[1] (%r) and height (%r) should match when both are used."
-                    % (size[1], height))
-            width,height = size
-        del size
-
-        if width <= 0 or height <= 0:
-            raise ValueError("width and height must be greater than zero")
-        if not isinteger(width) or not isinteger(height):
-            raise ValueError("width and height must be integers")
-        # http://www.w3.org/TR/PNG/#7Integers-and-byte-order
-        if width > 2**32-1 or height > 2**32-1:
-            raise ValueError("width and height cannot exceed 2**32-1")
-
-        if alpha and transparent is not None:
-            raise ValueError(
-                "transparent colour not allowed with alpha channel")
-
-        if bytes_per_sample is not None:
-            warnings.warn('please use bitdepth instead of bytes_per_sample',
-                          DeprecationWarning)
-            if bytes_per_sample not in (0.125, 0.25, 0.5, 1, 2):
-                raise ValueError(
-                    "bytes per sample must be .125, .25, .5, 1, or 2")
-            bitdepth = int(8*bytes_per_sample)
-        del bytes_per_sample
-        if not isinteger(bitdepth) or bitdepth < 1 or 16 < bitdepth:
-            raise ValueError("bitdepth (%r) must be a postive integer <= 16" %
-              bitdepth)
-
-        self.rescale = None
-        if palette:
-            if bitdepth not in (1,2,4,8):
-                raise ValueError("with palette, bitdepth must be 1, 2, 4, or 8")
-            if transparent is not None:
-                raise ValueError("transparent and palette not compatible")
-            if alpha:
-                raise ValueError("alpha and palette not compatible")
-            if greyscale:
-                raise ValueError("greyscale and palette not compatible")
-        else:
-            # No palette, check for sBIT chunk generation.
-            if alpha or not greyscale:
-                if bitdepth not in (8,16):
-                    targetbitdepth = (8,16)[bitdepth > 8]
-                    self.rescale = (bitdepth, targetbitdepth)
-                    bitdepth = targetbitdepth
-                    del targetbitdepth
-            else:
-                assert greyscale
-                assert not alpha
-                if bitdepth not in (1,2,4,8,16):
-                    if bitdepth > 8:
-                        targetbitdepth = 16
-                    elif bitdepth == 3:
-                        targetbitdepth = 4
-                    else:
-                        assert bitdepth in (5,6,7)
-                        targetbitdepth = 8
-                    self.rescale = (bitdepth, targetbitdepth)
-                    bitdepth = targetbitdepth
-                    del targetbitdepth
-
-        if bitdepth < 8 and (alpha or not greyscale and not palette):
-            raise ValueError(
-              "bitdepth < 8 only permitted with greyscale or palette")
-        if bitdepth > 8 and palette:
-            raise ValueError(
-                "bit depth must be 8 or less for images with palette")
-
-        transparent = check_color(transparent, 'transparent')
-        background = check_color(background, 'background')
-
-        # It's important that the true boolean values (greyscale, alpha,
-        # colormap, interlace) are converted to bool because Iverson's
-        # convention is relied upon later on.
-        self.width = width
-        self.height = height
-        self.transparent = transparent
-        self.background = background
-        self.gamma = gamma
-        self.greyscale = bool(greyscale)
-        self.alpha = bool(alpha)
-        self.colormap = bool(palette)
-        self.bitdepth = int(bitdepth)
-        self.compression = compression
-        self.chunk_limit = chunk_limit
-        self.interlace = bool(interlace)
-        self.palette = check_palette(palette)
-
-        self.color_type = 4*self.alpha + 2*(not greyscale) + 1*self.colormap
-        assert self.color_type in (0,2,3,4,6)
-
-        self.color_planes = (3,1)[self.greyscale or self.colormap]
-        self.planes = self.color_planes + self.alpha
-        # :todo: fix for bitdepth < 8
-        self.psize = (self.bitdepth/8) * self.planes
-
-    def make_palette(self):
-        """Create the byte sequences for a ``PLTE`` and if necessary a
-        ``tRNS`` chunk.  Returned as a pair (*p*, *t*).  *t* will be
-        ``None`` if no ``tRNS`` chunk is necessary.
-        """
-
-        p = array('B')
-        t = array('B')
-
-        for x in self.palette:
-            p.extend(x[0:3])
-            if len(x) > 3:
-                t.append(x[3])
-        p = tostring(p)
-        t = tostring(t)
-        if t:
-            return p,t
-        return p,None
-
-    def write(self, outfile, rows):
-        """Write a PNG image to the output file.  `rows` should be
-        an iterable that yields each row in boxed row flat pixel format.
-        The rows should be the rows of the original image, so there
-        should be ``self.height`` rows of ``self.width * self.planes`` values.
-        If `interlace` is specified (when creating the instance), then
-        an interlaced PNG file will be written.  Supply the rows in the
-        normal image order; the interlacing is carried out internally.
-        
-        .. note ::
-
-          Interlacing will require the entire image to be in working memory.
-        """
-
-        if self.interlace:
-            fmt = 'BH'[self.bitdepth > 8]
-            a = array(fmt, itertools.chain(*rows))
-            return self.write_array(outfile, a)
-        else:
-            nrows = self.write_passes(outfile, rows)
-            if nrows != self.height:
-                raise ValueError(
-                  "rows supplied (%d) does not match height (%d)" %
-                  (nrows, self.height))
-
-    def write_passes(self, outfile, rows, packed=False):
-        """
-        Write a PNG image to the output file.
-
-        Most users are expected to find the :meth:`write` or
-        :meth:`write_array` method more convenient.
-        
-        The rows should be given to this method in the order that
-        they appear in the output file.  For straightlaced images,
-        this is the usual top to bottom ordering, but for interlaced
-        images the rows should have already been interlaced before
-        passing them to this function.
-
-        `rows` should be an iterable that yields each row.  When
-        `packed` is ``False`` the rows should be in boxed row flat pixel
-        format; when `packed` is ``True`` each row should be a packed
-        sequence of bytes.
-
-        """
-
-        # http://www.w3.org/TR/PNG/#5PNG-file-signature
-        outfile.write(_signature)
-
-        # http://www.w3.org/TR/PNG/#11IHDR
-        write_chunk(outfile, 'IHDR',
-                    struct.pack("!2I5B", self.width, self.height,
-                                self.bitdepth, self.color_type,
-                                0, 0, self.interlace))
-
-        # See :chunk:order
-        # http://www.w3.org/TR/PNG/#11gAMA
-        if self.gamma is not None:
-            write_chunk(outfile, 'gAMA',
-                        struct.pack("!L", int(round(self.gamma*1e5))))
-
-        # See :chunk:order
-        # http://www.w3.org/TR/PNG/#11sBIT
-        if self.rescale:
-            write_chunk(outfile, 'sBIT',
-                struct.pack('%dB' % self.planes,
-                            *[self.rescale[0]]*self.planes))
-        
-        # :chunk:order: Without a palette (PLTE chunk), ordering is
-        # relatively relaxed.  With one, gAMA chunk must precede PLTE
-        # chunk which must precede tRNS and bKGD.
-        # See http://www.w3.org/TR/PNG/#5ChunkOrdering
-        if self.palette:
-            p,t = self.make_palette()
-            write_chunk(outfile, 'PLTE', p)
-            if t:
-                # tRNS chunk is optional.  Only needed if palette entries
-                # have alpha.
-                write_chunk(outfile, 'tRNS', t)
-
-        # http://www.w3.org/TR/PNG/#11tRNS
-        if self.transparent is not None:
-            if self.greyscale:
-                write_chunk(outfile, 'tRNS',
-                            struct.pack("!1H", *self.transparent))
-            else:
-                write_chunk(outfile, 'tRNS',
-                            struct.pack("!3H", *self.transparent))
-
-        # http://www.w3.org/TR/PNG/#11bKGD
-        if self.background is not None:
-            if self.greyscale:
-                write_chunk(outfile, 'bKGD',
-                            struct.pack("!1H", *self.background))
-            else:
-                write_chunk(outfile, 'bKGD',
-                            struct.pack("!3H", *self.background))
-
-        # http://www.w3.org/TR/PNG/#11IDAT
-        if self.compression is not None:
-            compressor = zlib.compressobj(self.compression)
-        else:
-            compressor = zlib.compressobj()
-
-        # Choose an extend function based on the bitdepth.  The extend
-        # function packs/decomposes the pixel values into bytes and
-        # stuffs them onto the data array.
-        data = array('B')
-        if self.bitdepth == 8 or packed:
-            extend = data.extend
-        elif self.bitdepth == 16:
-            # Decompose into bytes
-            def extend(sl):
-                fmt = '!%dH' % len(sl)
-                data.extend(array('B', struct.pack(fmt, *sl)))
-        else:
-            # Pack into bytes
-            assert self.bitdepth < 8
-            # samples per byte
-            spb = int(8/self.bitdepth)
-            def extend(sl):
-                a = array('B', sl)
-                # Adding padding bytes so we can group into a whole
-                # number of spb-tuples.
-                l = float(len(a))
-                extra = math.ceil(l / float(spb))*spb - l
-                a.extend([0]*int(extra))
-                # Pack into bytes
-                l = group(a, spb)
-                l = map(lambda e: reduce(lambda x,y:
-                                           (x << self.bitdepth) + y, e), l)
-                data.extend(l)
-        if self.rescale:
-            oldextend = extend
-            factor = \
-              float(2**self.rescale[1]-1) / float(2**self.rescale[0]-1)
-            def extend(sl):
-                oldextend(map(lambda x: int(round(factor*x)), sl))
-
-        # Build the first row, testing mostly to see if we need to
-        # changed the extend function to cope with NumPy integer types
-        # (they cause our ordinary definition of extend to fail, so we
-        # wrap it).  See
-        # http://code.google.com/p/pypng/issues/detail?id=44
-        enumrows = enumerate(rows)
-        del rows
-
-        # First row's filter type.
-        data.append(0)
-        # :todo: Certain exceptions in the call to ``.next()`` or the
-        # following try would indicate no row data supplied.
-        # Should catch.
-        i,row = enumrows.next()
-        try:
-            # If this fails...
-            extend(row)
-        except:
-            # ... try a version that converts the values to int first.
-            # Not only does this work for the (slightly broken) NumPy
-            # types, there are probably lots of other, unknown, "nearly"
-            # int types it works for.
-            def wrapmapint(f):
-                return lambda sl: f(map(int, sl))
-            extend = wrapmapint(extend)
-            del wrapmapint
-            extend(row)
-
-        for i,row in enumrows:
-            # Add "None" filter type.  Currently, it's essential that
-            # this filter type be used for every scanline as we do not
-            # mark the first row of a reduced pass image; that means we
-            # could accidentally compute the wrong filtered scanline if
-            # we used "up", "average", or "paeth" on such a line.
-            data.append(0)
-            extend(row)
-            if len(data) > self.chunk_limit:
-                compressed = compressor.compress(tostring(data))
-                if len(compressed):
-                    # print >> sys.stderr, len(data), len(compressed)
-                    write_chunk(outfile, 'IDAT', compressed)
-                # Because of our very witty definition of ``extend``,
-                # above, we must re-use the same ``data`` object.  Hence
-                # we use ``del`` to empty this one, rather than create a
-                # fresh one (which would be my natural FP instinct).
-                del data[:]
-        if len(data):
-            compressed = compressor.compress(tostring(data))
-        else:
-            compressed = ''
-        flushed = compressor.flush()
-        if len(compressed) or len(flushed):
-            # print >> sys.stderr, len(data), len(compressed), len(flushed)
-            write_chunk(outfile, 'IDAT', compressed + flushed)
-        # http://www.w3.org/TR/PNG/#11IEND
-        write_chunk(outfile, 'IEND')
-        return i+1
-
-    def write_array(self, outfile, pixels):
-        """
-        Write an array in flat row flat pixel format as a PNG file on
-        the output file.  See also :meth:`write` method.
-        """
-
-        if self.interlace:
-            self.write_passes(outfile, self.array_scanlines_interlace(pixels))
-        else:
-            self.write_passes(outfile, self.array_scanlines(pixels))
-
-    def write_packed(self, outfile, rows):
-        """
-        Write PNG file to `outfile`.  The pixel data comes from `rows`
-        which should be in boxed row packed format.  Each row should be
-        a sequence of packed bytes.
-
-        Technically, this method does work for interlaced images but it
-        is best avoided.  For interlaced images, the rows should be
-        presented in the order that they appear in the file.
-
-        This method should not be used when the source image bit depth
-        is not one naturally supported by PNG; the bit depth should be
-        1, 2, 4, 8, or 16.
-        """
-
-        if self.rescale:
-            raise Error("write_packed method not suitable for bit depth %d" %
-              self.rescale[0])
-        return self.write_passes(outfile, rows, packed=True)
-
-    def convert_pnm(self, infile, outfile):
-        """
-        Convert a PNM file containing raw pixel data into a PNG file
-        with the parameters set in the writer object.  Works for
-        (binary) PGM, PPM, and PAM formats.
-        """
-
-        if self.interlace:
-            pixels = array('B')
-            pixels.fromfile(infile,
-                            (self.bitdepth/8) * self.color_planes *
-                            self.width * self.height)
-            self.write_passes(outfile, self.array_scanlines_interlace(pixels))
-        else:
-            self.write_passes(outfile, self.file_scanlines(infile))
-
-    def convert_ppm_and_pgm(self, ppmfile, pgmfile, outfile):
-        """
-        Convert a PPM and PGM file containing raw pixel data into a
-        PNG outfile with the parameters set in the writer object.
-        """
-        pixels = array('B')
-        pixels.fromfile(ppmfile,
-                        (self.bitdepth/8) * self.color_planes *
-                        self.width * self.height)
-        apixels = array('B')
-        apixels.fromfile(pgmfile,
-                         (self.bitdepth/8) *
-                         self.width * self.height)
-        pixels = interleave_planes(pixels, apixels,
-                                   (self.bitdepth/8) * self.color_planes,
-                                   (self.bitdepth/8))
-        if self.interlace:
-            self.write_passes(outfile, self.array_scanlines_interlace(pixels))
-        else:
-            self.write_passes(outfile, self.array_scanlines(pixels))
-
-    def file_scanlines(self, infile):
-        """
-        Generates boxed rows in flat pixel format, from the input file
-        `infile`.  It assumes that the input file is in a "Netpbm-like"
-        binary format, and is positioned at the beginning of the first
-        pixel.  The number of pixels to read is taken from the image
-        dimensions (`width`, `height`, `planes`) and the number of bytes
-        per value is implied by the image `bitdepth`.
-        """
-
-        # Values per row
-        vpr = self.width * self.planes
-        row_bytes = vpr
-        if self.bitdepth > 8:
-            assert self.bitdepth == 16
-            row_bytes *= 2
-            fmt = '>%dH' % vpr
-            def line():
-                return array('H', struct.unpack(fmt, infile.read(row_bytes)))
-        else:
-            def line():
-                scanline = array('B', infile.read(row_bytes))
-                return scanline
-        for y in range(self.height):
-            yield line()
-
-    def array_scanlines(self, pixels):
-        """
-        Generates boxed rows (flat pixels) from flat rows (flat pixels)
-        in an array.
-        """
-
-        # Values per row
-        vpr = self.width * self.planes
-        stop = 0
-        for y in range(self.height):
-            start = stop
-            stop = start + vpr
-            yield pixels[start:stop]
-
-    def array_scanlines_interlace(self, pixels):
-        """
-        Generator for interlaced scanlines from an array.  `pixels` is
-        the full source image in flat row flat pixel format.  The
-        generator yields each scanline of the reduced passes in turn, in
-        boxed row flat pixel format.
-        """
-
-        # http://www.w3.org/TR/PNG/#8InterlaceMethods
-        # Array type.
-        fmt = 'BH'[self.bitdepth > 8]
-        # Value per row
-        vpr = self.width * self.planes
-        for xstart, ystart, xstep, ystep in _adam7:
-            if xstart >= self.width:
-                continue
-            # Pixels per row (of reduced image)
-            ppr = int(math.ceil((self.width-xstart)/float(xstep)))
-            # number of values in reduced image row.
-            row_len = ppr*self.planes
-            for y in range(ystart, self.height, ystep):
-                if xstep == 1:
-                    offset = y * vpr
-                    yield pixels[offset:offset+vpr]
-                else:
-                    row = array(fmt)
-                    # There's no easier way to set the length of an array
-                    row.extend(pixels[0:row_len])
-                    offset = y * vpr + xstart * self.planes
-                    end_offset = (y+1) * vpr
-                    skip = self.planes * xstep
-                    for i in range(self.planes):
-                        row[i::self.planes] = \
-                            pixels[offset+i:end_offset:skip]
-                    yield row
-
-def write_chunk(outfile, tag, data=strtobytes('')):
-    """
-    Write a PNG chunk to the output file, including length and
-    checksum.
-    """
-
-    # http://www.w3.org/TR/PNG/#5Chunk-layout
-    outfile.write(struct.pack("!I", len(data)))
-    tag = strtobytes(tag)
-    outfile.write(tag)
-    outfile.write(data)
-    checksum = zlib.crc32(tag)
-    checksum = zlib.crc32(data, checksum)
-    checksum &= 2**32-1
-    outfile.write(struct.pack("!I", checksum))
-
-def write_chunks(out, chunks):
-    """Create a PNG file by writing out the chunks."""
-
-    out.write(_signature)
-    for chunk in chunks:
-        write_chunk(out, *chunk)
-
-def filter_scanline(type, line, fo, prev=None):
-    """Apply a scanline filter to a scanline.  `type` specifies the
-    filter type (0 to 4); `line` specifies the current (unfiltered)
-    scanline as a sequence of bytes; `prev` specifies the previous
-    (unfiltered) scanline as a sequence of bytes. `fo` specifies the
-    filter offset; normally this is size of a pixel in bytes (the number
-    of bytes per sample times the number of channels), but when this is
-    < 1 (for bit depths < 8) then the filter offset is 1.
-    """
-
-    assert 0 <= type < 5
-
-    # The output array.  Which, pathetically, we extend one-byte at a
-    # time (fortunately this is linear).
-    out = array('B', [type])
-
-    def sub():
-        ai = -fo
-        for x in line:
-            if ai >= 0:
-                x = (x - line[ai]) & 0xff
-            out.append(x)
-            ai += 1
-    def up():
-        for i,x in enumerate(line):
-            x = (x - prev[i]) & 0xff
-            out.append(x)
-    def average():
-        ai = -fo
-        for i,x in enumerate(line):
-            if ai >= 0:
-                x = (x - ((line[ai] + prev[i]) >> 1)) & 0xff
-            else:
-                x = (x - (prev[i] >> 1)) & 0xff
-            out.append(x)
-            ai += 1
-    def paeth():
-        # http://www.w3.org/TR/PNG/#9Filter-type-4-Paeth
-        ai = -fo # also used for ci
-        for i,x in enumerate(line):
-            a = 0
-            b = prev[i]
-            c = 0
-
-            if ai >= 0:
-                a = line[ai]
-                c = prev[ai]
-            p = a + b - c
-            pa = abs(p - a)
-            pb = abs(p - b)
-            pc = abs(p - c)
-            if pa <= pb and pa <= pc: Pr = a
-            elif pb <= pc: Pr = b
-            else: Pr = c
-
-            x = (x - Pr) & 0xff
-            out.append(x)
-            ai += 1
-
-    if not prev:
-        # We're on the first line.  Some of the filters can be reduced
-        # to simpler cases which makes handling the line "off the top"
-        # of the image simpler.  "up" becomes "none"; "paeth" becomes
-        # "left" (non-trivial, but true). "average" needs to be handled
-        # specially.
-        if type == 2: # "up"
-            return line # type = 0
-        elif type == 3:
-            prev = [0]*len(line)
-        elif type == 4: # "paeth"
-            type = 1
-    if type == 0:
-        out.extend(line)
-    elif type == 1:
-        sub()
-    elif type == 2:
-        up()
-    elif type == 3:
-        average()
-    else: # type == 4
-        paeth()
-    return out
-
-
-def from_array(a, mode=None, info={}):
-    """Create a PNG :class:`Image` object from a 2- or 3-dimensional array.
-    One application of this function is easy PIL-style saving:
-    ``png.from_array(pixels, 'L').save('foo.png')``.
-
-    .. note :
-
-      The use of the term *3-dimensional* is for marketing purposes
-      only.  It doesn't actually work.  Please bear with us.  Meanwhile
-      enjoy the complimentary snacks (on request) and please use a
-      2-dimensional array.
-    
-    Unless they are specified using the *info* parameter, the PNG's
-    height and width are taken from the array size.  For a 3 dimensional
-    array the first axis is the height; the second axis is the width;
-    and the third axis is the channel number.  Thus an RGB image that is
-    16 pixels high and 8 wide will use an array that is 16x8x3.  For 2
-    dimensional arrays the first axis is the height, but the second axis
-    is ``width*channels``, so an RGB image that is 16 pixels high and 8
-    wide will use a 2-dimensional array that is 16x24 (each row will be
-    8*3==24 sample values).
-
-    *mode* is a string that specifies the image colour format in a
-    PIL-style mode.  It can be:
-
-    ``'L'``
-      greyscale (1 channel)
-    ``'LA'``
-      greyscale with alpha (2 channel)
-    ``'RGB'``
-      colour image (3 channel)
-    ``'RGBA'``
-      colour image with alpha (4 channel)
-
-    The mode string can also specify the bit depth (overriding how this
-    function normally derives the bit depth, see below).  Appending
-    ``';16'`` to the mode will cause the PNG to be 16 bits per channel;
-    any decimal from 1 to 16 can be used to specify the bit depth.
-
-    When a 2-dimensional array is used *mode* determines how many
-    channels the image has, and so allows the width to be derived from
-    the second array dimension.
-
-    The array is expected to be a ``numpy`` array, but it can be any
-    suitable Python sequence.  For example, a list of lists can be used:
-    ``png.from_array([[0, 255, 0], [255, 0, 255]], 'L')``.  The exact
-    rules are: ``len(a)`` gives the first dimension, height;
-    ``len(a[0])`` gives the second dimension; ``len(a[0][0])`` gives the
-    third dimension, unless an exception is raised in which case a
-    2-dimensional array is assumed.  It's slightly more complicated than
-    that because an iterator of rows can be used, and it all still
-    works.  Using an iterator allows data to be streamed efficiently.
-
-    The bit depth of the PNG is normally taken from the array element's
-    datatype (but if *mode* specifies a bitdepth then that is used
-    instead).  The array element's datatype is determined in a way which
-    is supposed to work both for ``numpy`` arrays and for Python
-    ``array.array`` objects.  A 1 byte datatype will give a bit depth of
-    8, a 2 byte datatype will give a bit depth of 16.  If the datatype
-    does not have an implicit size, for example it is a plain Python
-    list of lists, as above, then a default of 8 is used.
-
-    The *info* parameter is a dictionary that can be used to specify
-    metadata (in the same style as the arguments to the
-    :class:``png.Writer`` class).  For this function the keys that are
-    useful are:
-    
-    height
-      overrides the height derived from the array dimensions and allows
-      *a* to be an iterable.
-    width
-      overrides the width derived from the array dimensions.
-    bitdepth
-      overrides the bit depth derived from the element datatype (but
-      must match *mode* if that also specifies a bit depth).
-
-    Generally anything specified in the
-    *info* dictionary will override any implicit choices that this
-    function would otherwise make, but must match any explicit ones.
-    For example, if the *info* dictionary has a ``greyscale`` key then
-    this must be true when mode is ``'L'`` or ``'LA'`` and false when
-    mode is ``'RGB'`` or ``'RGBA'``.
-    """
-
-    # We abuse the *info* parameter by modifying it.  Take a copy here.
-    # (Also typechecks *info* to some extent).
-    info = dict(info)
-
-    # Syntax check mode string.
-    bitdepth = None
-    try:
-        mode = mode.split(';')
-        if len(mode) not in (1,2):
-            raise Error()
-        if mode[0] not in ('L', 'LA', 'RGB', 'RGBA'):
-            raise Error()
-        if len(mode) == 2:
-            try:
-                bitdepth = int(mode[1])
-            except:
-                raise Error()
-    except Error:
-        raise Error("mode string should be 'RGB' or 'L;16' or similar.")
-    mode = mode[0]
-
-    # Get bitdepth from *mode* if possible.
-    if bitdepth:
-        if info.get('bitdepth') and bitdepth != info['bitdepth']:
-            raise Error("mode bitdepth (%d) should match info bitdepth (%d)." %
-              (bitdepth, info['bitdepth']))
-        info['bitdepth'] = bitdepth
-
-    # Fill in and/or check entries in *info*.
-    # Dimensions.
-    if 'size' in info:
-        # Check width, height, size all match where used.
-        for dimension,axis in [('width', 0), ('height', 1)]:
-            if dimension in info:
-                if info[dimension] != info['size'][axis]:
-                    raise Error(
-                      "info[%r] shhould match info['size'][%r]." %
-                      (dimension, axis))
-        info['width'],info['height'] = info['size']
-    if 'height' not in info:
-        try:
-            l = len(a)
-        except:
-            raise Error(
-              "len(a) does not work, supply info['height'] instead.")
-        info['height'] = l
-    # Colour format.
-    if 'greyscale' in info:
-        if bool(info['greyscale']) != ('L' in mode):
-            raise Error("info['greyscale'] should match mode.")
-    info['greyscale'] = 'L' in mode
-    if 'alpha' in info:
-        if bool(info['alpha']) != ('A' in mode):
-            raise Error("info['alpha'] should match mode.")
-    info['alpha'] = 'A' in mode
-
-    planes = len(mode)
-    if 'planes' in info:
-        if info['planes'] != planes:
-            raise Error("info['planes'] should match mode.")
-
-    # In order to work out whether we the array is 2D or 3D we need its
-    # first row, which requires that we take a copy of its iterator.
-    # We may also need the first row to derive width and bitdepth.
-    a,t = itertools.tee(a)
-    row = t.next()
-    del t
-    try:
-        row[0][0]
-        threed = True
-        testelement = row[0]
-    except:
-        threed = False
-        testelement = row
-    if 'width' not in info:
-        if threed:
-            width = len(row)
-        else:
-            width = len(row) // planes
-        info['width'] = width
-
-    # Not implemented yet
-    assert not threed
-
-    if 'bitdepth' not in info:
-        try:
-            dtype = testelement.dtype
-            # goto the "else:" clause.  Sorry.
-        except:
-            try:
-                # Try a Python array.array.
-                bitdepth = 8 * testelement.itemsize
-            except:
-                # We can't determine it from the array element's
-                # datatype, use a default of 8.
-                bitdepth = 8
-        else:
-            # If we got here without exception, we now assume that
-            # the array is a numpy array.
-            if dtype.kind == 'b':
-                bitdepth = 1
-            else:
-                bitdepth = 8 * dtype.itemsize
-        info['bitdepth'] = bitdepth
-
-    for thing in 'width height bitdepth greyscale alpha'.split():
-        assert thing in info
-    return Image(a, info)
-
-# So that refugee's from PIL feel more at home.  Not documented.
-fromarray = from_array
-
-class Image:
-    """A PNG image.
-    You can create an :class:`Image` object from an array of pixels by calling
-    :meth:`png.from_array`.  It can be saved to disk with the
-    :meth:`save` method."""
-    def __init__(self, rows, info):
-        """
-        .. note ::
-        
-          The constructor is not public.  Please do not call it.
-        """
-        
-        self.rows = rows
-        self.info = info
-
-    def save(self, file):
-        """Save the image to *file*.  If *file* looks like an open file
-        descriptor then it is used, otherwise it is treated as a
-        filename and a fresh file is opened.
-
-        In general, you can only call this method once; after it has
-        been called the first time and the PNG image has been saved, the
-        source data will have been streamed, and cannot be streamed
-        again.
-        """
-
-        w = Writer(**self.info)
-
-        try:
-            file.write
-            def close(): pass
-        except:
-            file = open(file, 'wb')
-            def close(): file.close()
-
-        try:
-            w.write(file, self.rows)
-        finally:
-            close()
-
-class _readable:
-    """
-    A simple file-like interface for strings and arrays.
-    """
-
-    def __init__(self, buf):
-        self.buf = buf
-        self.offset = 0
-
-    def read(self, n):
-        r = self.buf[self.offset:self.offset+n]
-        if isarray(r):
-            r = r.tostring()
-        self.offset += n
-        return r
-
-
-class Reader:
-    """
-    PNG decoder in pure Python.
-    """
-
-    def __init__(self, _guess=None, **kw):
-        """
-        Create a PNG decoder object.
-
-        The constructor expects exactly one keyword argument. If you
-        supply a positional argument instead, it will guess the input
-        type. You can choose among the following keyword arguments:
-
-        filename
-          Name of input file (a PNG file).
-        file
-          A file-like object (object with a read() method).
-        bytes
-          ``array`` or ``string`` with PNG data.
-
-        """
-        if ((_guess is not None and len(kw) != 0) or
-            (_guess is None and len(kw) != 1)):
-            raise TypeError("Reader() takes exactly 1 argument")
-
-        # Will be the first 8 bytes, later on.  See validate_signature.
-        self.signature = None
-        self.transparent = None
-        # A pair of (len,type) if a chunk has been read but its data and
-        # checksum have not (in other words the file position is just
-        # past the 4 bytes that specify the chunk type).  See preamble
-        # method for how this is used.
-        self.atchunk = None
-
-        if _guess is not None:
-            if isarray(_guess):
-                kw["bytes"] = _guess
-            elif isinstance(_guess, str):
-                kw["filename"] = _guess
-            elif isinstance(_guess, file):
-                kw["file"] = _guess
-
-        if "filename" in kw:
-            self.file = open(kw["filename"], "rb")
-        elif "file" in kw:
-            self.file = kw["file"]
-        elif "bytes" in kw:
-            self.file = _readable(kw["bytes"])
-        else:
-            raise TypeError("expecting filename, file or bytes array")
-
-    def chunk(self, seek=None):
-        """
-        Read the next PNG chunk from the input file; returns a
-        (*type*,*data*) tuple.  *type* is the chunk's type as a string
-        (all PNG chunk types are 4 characters long).  *data* is the
-        chunk's data content, as a string.
-
-        If the optional `seek` argument is
-        specified then it will keep reading chunks until it either runs
-        out of file or finds the type specified by the argument.  Note
-        that in general the order of chunks in PNGs is unspecified, so
-        using `seek` can cause you to miss chunks.
-        """
-
-        self.validate_signature()
-
-        while True:
-            # http://www.w3.org/TR/PNG/#5Chunk-layout
-            if not self.atchunk:
-                self.atchunk = self.chunklentype()
-            length,type = self.atchunk
-            self.atchunk = None
-            data = self.file.read(length)
-            if len(data) != length:
-                raise ChunkError('Chunk %s too short for required %i octets.'
-                  % (type, length))
-            checksum = self.file.read(4)
-            if len(checksum) != 4:
-                raise ValueError('Chunk %s too short for checksum.', tag)
-            if seek and type != seek:
-                continue
-            verify = zlib.crc32(strtobytes(type))
-            verify = zlib.crc32(data, verify)
-            # Whether the output from zlib.crc32 is signed or not varies
-            # according to hideous implementation details, see
-            # http://bugs.python.org/issue1202 .
-            # We coerce it to be positive here (in a way which works on
-            # Python 2.3 and older).
-            verify &= 2**32 - 1
-            verify = struct.pack('!I', verify)
-            if checksum != verify:
-                # print repr(checksum)
-                (a, ) = struct.unpack('!I', checksum)
-                (b, ) = struct.unpack('!I', verify)
-                raise ChunkError(
-                  "Checksum error in %s chunk: 0x%08X != 0x%08X." %
-                  (type, a, b))
-            return type, data
-
-    def chunks(self):
-        """Return an iterator that will yield each chunk as a
-        (*chunktype*, *content*) pair.
-        """
-
-        while True:
-            t,v = self.chunk()
-            yield t,v
-            if t == 'IEND':
-                break
-
-    def undo_filter(self, filter_type, scanline, previous):
-        """Undo the filter for a scanline.  `scanline` is a sequence of
-        bytes that does not include the initial filter type byte.
-        `previous` is decoded previous scanline (for straightlaced
-        images this is the previous pixel row, but for interlaced
-        images, it is the previous scanline in the reduced image, which
-        in general is not the previous pixel row in the final image).
-        When there is no previous scanline (the first row of a
-        straightlaced image, or the first row in one of the passes in an
-        interlaced image), then this argument should be ``None``.
-
-        The scanline will have the effects of filtering removed, and the
-        result will be returned as a fresh sequence of bytes.
-        """
-
-        # :todo: Would it be better to update scanline in place?
-
-        # Create the result byte array.  It seems that the best way to
-        # create the array to be the right size is to copy from an
-        # existing sequence.  *sigh*
-        # If we fill the result with scanline, then this allows a
-        # micro-optimisation in the "null" and "sub" cases.
-        result = array('B', scanline)
-
-        if filter_type == 0:
-            # And here, we _rely_ on filling the result with scanline,
-            # above.
-            return result
-
-        if filter_type not in (1,2,3,4):
-            raise FormatError('Invalid PNG Filter Type.'
-              '  See http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters .')
-
-        # Filter unit.  The stride from one pixel to the corresponding
-        # byte from the previous previous.  Normally this is the pixel
-        # size in bytes, but when this is smaller than 1, the previous
-        # byte is used instead.
-        fu = max(1, self.psize)
-
-        # For the first line of a pass, synthesize a dummy previous
-        # line.  An alternative approach would be to observe that on the
-        # first line 'up' is the same as 'null', 'paeth' is the same
-        # as 'sub', with only 'average' requiring any special case.
-        if not previous:
-            previous = array('B', [0]*len(scanline))
-
-        def sub():
-            """Undo sub filter."""
-
-            ai = 0
-            # Loops starts at index fu.  Observe that the initial part
-            # of the result is already filled in correctly with
-            # scanline.
-            for i in range(fu, len(result)):
-                x = scanline[i]
-                a = result[ai]
-                result[i] = (x + a) & 0xff
-                ai += 1
-
-        def up():
-            """Undo up filter."""
-
-            for i in range(len(result)):
-                x = scanline[i]
-                b = previous[i]
-                result[i] = (x + b) & 0xff
-
-        def average():
-            """Undo average filter."""
-
-            ai = -fu
-            for i in range(len(result)):
-                x = scanline[i]
-                if ai < 0:
-                    a = 0
-                else:
-                    a = result[ai]
-                b = previous[i]
-                result[i] = (x + ((a + b) >> 1)) & 0xff
-                ai += 1
-
-        def paeth():
-            """Undo Paeth filter."""
-
-            # Also used for ci.
-            ai = -fu
-            for i in range(len(result)):
-                x = scanline[i]
-                if ai < 0:
-                    a = c = 0
-                else:
-                    a = result[ai]
-                    c = previous[ai]
-                b = previous[i]
-                p = a + b - c
-                pa = abs(p - a)
-                pb = abs(p - b)
-                pc = abs(p - c)
-                if pa <= pb and pa <= pc:
-                    pr = a
-                elif pb <= pc:
-                    pr = b
-                else:
-                    pr = c
-                result[i] = (x + pr) & 0xff
-                ai += 1
-
-        # Call appropriate filter algorithm.  Note that 0 has already
-        # been dealt with.
-        (None, sub, up, average, paeth)[filter_type]()
-        return result
-
-    def deinterlace(self, raw):
-        """
-        Read raw pixel data, undo filters, deinterlace, and flatten.
-        Return in flat row flat pixel format.
-        """
-
-        # print >> sys.stderr, ("Reading interlaced, w=%s, r=%s, planes=%s," +
-        #     " bpp=%s") % (self.width, self.height, self.planes, self.bps)
-        # Values per row (of the target image)
-        vpr = self.width * self.planes
-
-        # Make a result array, and make it big enough.  Interleaving
-        # writes to the output array randomly (well, not quite), so the
-        # entire output array must be in memory.
-        fmt = 'BH'[self.bitdepth > 8]
-        a = array(fmt, [0]*vpr*self.height)
-        source_offset = 0
-
-        for xstart, ystart, xstep, ystep in _adam7:
-            # print >> sys.stderr, "Adam7: start=%s,%s step=%s,%s" % (
-            #     xstart, ystart, xstep, ystep)
-            if xstart >= self.width:
-                continue
-            # The previous (reconstructed) scanline.  None at the
-            # beginning of a pass to indicate that there is no previous
-            # line.
-            recon = None
-            # Pixels per row (reduced pass image)
-            ppr = int(math.ceil((self.width-xstart)/float(xstep)))
-            # Row size in bytes for this pass.
-            row_size = int(math.ceil(self.psize * ppr))
-            for y in range(ystart, self.height, ystep):
-                filter_type = raw[source_offset]
-                source_offset += 1
-                scanline = raw[source_offset:source_offset+row_size]
-                source_offset += row_size
-                recon = self.undo_filter(filter_type, scanline, recon)
-                # Convert so that there is one element per pixel value
-                flat = self.serialtoflat(recon, ppr)
-                if xstep == 1:
-                    assert xstart == 0
-                    offset = y * vpr
-                    a[offset:offset+vpr] = flat
-                else:
-                    offset = y * vpr + xstart * self.planes
-                    end_offset = (y+1) * vpr
-                    skip = self.planes * xstep
-                    for i in range(self.planes):
-                        a[offset+i:end_offset:skip] = \
-                            flat[i::self.planes]
-        return a
-
-    def iterboxed(self, rows):
-        """Iterator that yields each scanline in boxed row flat pixel
-        format.  `rows` should be an iterator that yields the bytes of
-        each row in turn.
-        """
-
-        def asvalues(raw):
-            """Convert a row of raw bytes into a flat row.  Result may
-            or may not share with argument"""
-
-            if self.bitdepth == 8:
-                return raw
-            if self.bitdepth == 16:
-                raw = tostring(raw)
-                return array('H', struct.unpack('!%dH' % (len(raw)//2), raw))
-            assert self.bitdepth < 8
-            width = self.width
-            # Samples per byte
-            spb = 8//self.bitdepth
-            out = array('B')
-            mask = 2**self.bitdepth - 1
-            shifts = map(self.bitdepth.__mul__, reversed(range(spb)))
-            for o in raw:
-                out.extend(map(lambda i: mask&(o>>i), shifts))
-            return out[:width]
-
-        return itertools.imap(asvalues, rows)
-
-    def serialtoflat(self, bytes, width=None):
-        """Convert serial format (byte stream) pixel data to flat row
-        flat pixel.
-        """
-
-        if self.bitdepth == 8:
-            return bytes
-        if self.bitdepth == 16:
-            bytes = tostring(bytes)
-            return array('H',
-              struct.unpack('!%dH' % (len(bytes)//2), bytes))
-        assert self.bitdepth < 8
-        if width is None:
-            width = self.width
-        # Samples per byte
-        spb = 8//self.bitdepth
-        out = array('B')
-        mask = 2**self.bitdepth - 1
-        shifts = map(self.bitdepth.__mul__, reversed(range(spb)))
-        l = width
-        for o in bytes:
-            out.extend([(mask&(o>>s)) for s in shifts][:l])
-            l -= spb
-            if l <= 0:
-                l = width
-        return out
-
-    def iterstraight(self, raw):
-        """Iterator that undoes the effect of filtering, and yields each
-        row in serialised format (as a sequence of bytes).  Assumes input
-        is straightlaced.  `raw` should be an iterable that yields the
-        raw bytes in chunks of arbitrary size."""
-
-        # length of row, in bytes
-        rb = self.row_bytes
-        a = array('B')
-        # The previous (reconstructed) scanline.  None indicates first
-        # line of image.
-        recon = None
-        for some in raw:
-            a.extend(some)
-            while len(a) >= rb + 1:
-                filter_type = a[0]
-                scanline = a[1:rb+1]
-                del a[:rb+1]
-                recon = self.undo_filter(filter_type, scanline, recon)
-                yield recon
-        if len(a) != 0:
-            # :file:format We get here with a file format error: when the
-            # available bytes (after decompressing) do not pack into exact
-            # rows.
-            raise FormatError(
-              'Wrong size for decompressed IDAT chunk.')
-        assert len(a) == 0
-
-    def validate_signature(self):
-        """If signature (header) has not been read then read and
-        validate it; otherwise do nothing.
-        """
-
-        if self.signature:
-            return
-        self.signature = self.file.read(8)
-        if self.signature != _signature:
-            raise FormatError("PNG file has invalid signature.")
-
-    def preamble(self):
-        """
-        Extract the image metadata by reading the initial part of the PNG
-        file up to the start of the ``IDAT`` chunk.  All the chunks that
-        precede the ``IDAT`` chunk are read and either processed for
-        metadata or discarded.
-        """
-
-        self.validate_signature()
-
-        while True:
-            if not self.atchunk:
-                self.atchunk = self.chunklentype()
-                if self.atchunk is None:
-                    raise FormatError(
-                      'This PNG file has no IDAT chunks.')
-            if self.atchunk[1] == 'IDAT':
-                return
-            self.process_chunk()
-
-    def chunklentype(self):
-        """Reads just enough of the input to determine the next
-        chunk's length and type, returned as a (*length*, *type*) pair
-        where *type* is a string.  If there are no more chunks, ``None``
-        is returned.
-        """
-
-        x = self.file.read(8)
-        if not x:
-            return None
-        if len(x) != 8:
-            raise FormatError(
-              'End of file whilst reading chunk length and type.')
-        length,type = struct.unpack('!I4s', x)
-        type = bytestostr(type)
-        if length > 2**31-1:
-            raise FormatError('Chunk %s is too large: %d.' % (type,length))
-        return length,type
-
-    def process_chunk(self):
-        """Process the next chunk and its data.  This only processes the
-        following chunk types, all others are ignored: ``IHDR``,
-        ``PLTE``, ``bKGD``, ``tRNS``, ``gAMA``, ``sBIT``.
-        """
-
-        type, data = self.chunk()
-        if type == 'IHDR':
-            # http://www.w3.org/TR/PNG/#11IHDR
-            if len(data) != 13:
-                raise FormatError('IHDR chunk has incorrect length.')
-            (self.width, self.height, self.bitdepth, self.color_type,
-             self.compression, self.filter,
-             self.interlace) = struct.unpack("!2I5B", data)
-
-            # Check that the header specifies only valid combinations.
-            if self.bitdepth not in (1,2,4,8,16):
-                raise Error("invalid bit depth %d" % self.bitdepth)
-            if self.color_type not in (0,2,3,4,6):
-                raise Error("invalid colour type %d" % self.color_type)
-            # Check indexed (palettized) images have 8 or fewer bits
-            # per pixel; check only indexed or greyscale images have
-            # fewer than 8 bits per pixel.
-            if ((self.color_type & 1 and self.bitdepth > 8) or
-                (self.bitdepth < 8 and self.color_type not in (0,3))):
-                raise FormatError("Illegal combination of bit depth (%d)"
-                  " and colour type (%d)."
-                  " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ."
-                  % (self.bitdepth, self.color_type))
-            if self.compression != 0:
-                raise Error("unknown compression method %d" % self.compression)
-            if self.filter != 0:
-                raise FormatError("Unknown filter method %d,"
-                  " see http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters ."
-                  % self.filter)
-            if self.interlace not in (0,1):
-                raise FormatError("Unknown interlace method %d,"
-                  " see http://www.w3.org/TR/2003/REC-PNG-20031110/#8InterlaceMethods ."
-                  % self.interlace)
-
-            # Derived values
-            # http://www.w3.org/TR/PNG/#6Colour-values
-            colormap =  bool(self.color_type & 1)
-            greyscale = not (self.color_type & 2)
-            alpha = bool(self.color_type & 4)
-            color_planes = (3,1)[greyscale or colormap]
-            planes = color_planes + alpha
-
-            self.colormap = colormap
-            self.greyscale = greyscale
-            self.alpha = alpha
-            self.color_planes = color_planes
-            self.planes = planes
-            self.psize = float(self.bitdepth)/float(8) * planes
-            if int(self.psize) == self.psize:
-                self.psize = int(self.psize)
-            self.row_bytes = int(math.ceil(self.width * self.psize))
-            # Stores PLTE chunk if present, and is used to check
-            # chunk ordering constraints.
-            self.plte = None
-            # Stores tRNS chunk if present, and is used to check chunk
-            # ordering constraints.
-            self.trns = None
-            # Stores sbit chunk if present.
-            self.sbit = None
-        elif type == 'PLTE':
-            # http://www.w3.org/TR/PNG/#11PLTE
-            if self.plte:
-                warnings.warn("Multiple PLTE chunks present.")
-            self.plte = data
-            if len(data) % 3 != 0:
-                raise FormatError(
-                  "PLTE chunk's length should be a multiple of 3.")
-            if len(data) > (2**self.bitdepth)*3:
-                raise FormatError("PLTE chunk is too long.")
-            if len(data) == 0:
-                raise FormatError("Empty PLTE is not allowed.")
-        elif type == 'bKGD':
-            try:
-                if self.colormap:
-                    if not self.plte:
-                        warnings.warn(
-                          "PLTE chunk is required before bKGD chunk.")
-                    self.background = struct.unpack('B', data)
-                else:
-                    self.background = struct.unpack("!%dH" % self.color_planes,
-                      data)
-            except struct.error:
-                raise FormatError("bKGD chunk has incorrect length.")
-        elif type == 'tRNS':
-            # http://www.w3.org/TR/PNG/#11tRNS
-            self.trns = data
-            if self.colormap:
-                if not self.plte:
-                    warnings.warn("PLTE chunk is required before tRNS chunk.")
-                else:
-                    if len(data) > len(self.plte)/3:
-                        # Was warning, but promoted to Error as it
-                        # would otherwise cause pain later on.
-                        raise FormatError("tRNS chunk is too long.")
-            else:
-                if self.alpha:
-                    raise FormatError(
-                      "tRNS chunk is not valid with colour type %d." %
-                      self.color_type)
-                try:
-                    self.transparent = \
-                        struct.unpack("!%dH" % self.color_planes, data)
-                except struct.error:
-                    raise FormatError("tRNS chunk has incorrect length.")
-        elif type == 'gAMA':
-            try:
-                self.gamma = struct.unpack("!L", data)[0] / 100000.0
-            except struct.error:
-                raise FormatError("gAMA chunk has incorrect length.")
-        elif type == 'sBIT':
-            self.sbit = data
-            if (self.colormap and len(data) != 3 or
-                not self.colormap and len(data) != self.planes):
-                raise FormatError("sBIT chunk has incorrect length.")
-
-    def read(self):
-        """
-        Read the PNG file and decode it.  Returns (`width`, `height`,
-        `pixels`, `metadata`).
-
-        May use excessive memory.
-
-        `pixels` are returned in boxed row flat pixel format.
-        """
-
-        def iteridat():
-            """Iterator that yields all the ``IDAT`` chunks as strings."""
-            while True:
-                try:
-                    type, data = self.chunk()
-                except ValueError, e:
-                    raise ChunkError(e.args[0])
-                if type == 'IEND':
-                    # http://www.w3.org/TR/PNG/#11IEND
-                    break
-                if type != 'IDAT':
-                    continue
-                # type == 'IDAT'
-                # http://www.w3.org/TR/PNG/#11IDAT
-                if self.colormap and not self.plte:
-                    warnings.warn("PLTE chunk is required before IDAT chunk")
-                yield data
-
-        def iterdecomp(idat):
-            """Iterator that yields decompressed strings.  `idat` should
-            be an iterator that yields the ``IDAT`` chunk data.
-            """
-
-            # Currently, with no max_length paramter to decompress, this
-            # routine will do one yield per IDAT chunk.  So not very
-            # incremental.
-            d = zlib.decompressobj()
-            # Each IDAT chunk is passed to the decompressor, then any
-            # remaining state is decompressed out.
-            for data in idat:
-                # :todo: add a max_length argument here to limit output
-                # size.
-                yield array('B', d.decompress(data))
-            yield array('B', d.flush())
-
-        self.preamble()
-        raw = iterdecomp(iteridat())
-
-        if self.interlace:
-            raw = array('B', itertools.chain(*raw))
-            arraycode = 'BH'[self.bitdepth>8]
-            # Like :meth:`group` but producing an array.array object for
-            # each row.
-            pixels = itertools.imap(lambda *row: array(arraycode, row),
-                       *[iter(self.deinterlace(raw))]*self.width*self.planes)
-        else:
-            pixels = self.iterboxed(self.iterstraight(raw))
-        meta = dict()
-        for attr in 'greyscale alpha planes bitdepth interlace'.split():
-            meta[attr] = getattr(self, attr)
-        meta['size'] = (self.width, self.height)
-        for attr in 'gamma transparent background'.split():
-            a = getattr(self, attr, None)
-            if a is not None:
-                meta[attr] = a
-        return self.width, self.height, pixels, meta
-
-
-    def read_flat(self):
-        """
-        Read a PNG file and decode it into flat row flat pixel format.
-        Returns (*width*, *height*, *pixels*, *metadata*).
-
-        May use excessive memory.
-
-        `pixels` are returned in flat row flat pixel format.
-
-        See also the :meth:`read` method which returns pixels in the
-        more stream-friendly boxed row flat pixel format.
-        """
-
-        x, y, pixel, meta = self.read()
-        arraycode = 'BH'[meta['bitdepth']>8]
-        pixel = array(arraycode, itertools.chain(*pixel))
-        return x, y, pixel, meta
-
-    def palette(self, alpha='natural'):
-        """Returns a palette that is a sequence of 3-tuples or 4-tuples,
-        synthesizing it from the ``PLTE`` and ``tRNS`` chunks.  These
-        chunks should have already been processed (for example, by
-        calling the :meth:`preamble` method).  All the tuples are the
-        same size: 3-tuples if there is no ``tRNS`` chunk, 4-tuples when
-        there is a ``tRNS`` chunk.  Assumes that the image is colour type
-        3 and therefore a ``PLTE`` chunk is required.
-
-        If the `alpha` argument is ``'force'`` then an alpha channel is
-        always added, forcing the result to be a sequence of 4-tuples.
-        """
-
-        if not self.plte:
-            raise FormatError(
-                "Required PLTE chunk is missing in colour type 3 image.")
-        plte = group(array('B', self.plte), 3)
-        if self.trns or alpha == 'force':
-            trns = array('B', self.trns or '')
-            trns.extend([255]*(len(plte)-len(trns)))
-            plte = map(operator.add, plte, group(trns, 1))
-        return plte
-
-    def asDirect(self):
-        """Returns the image data as a direct representation of an
-        ``x * y * planes`` array.  This method is intended to remove the
-        need for callers to deal with palettes and transparency
-        themselves.  Images with a palette (colour type 3)
-        are converted to RGB or RGBA; images with transparency (a
-        ``tRNS`` chunk) are converted to LA or RGBA as appropriate.
-        When returned in this format the pixel values represent the
-        colour value directly without needing to refer to palettes or
-        transparency information.
-
-        Like the :meth:`read` method this method returns a 4-tuple:
-
-        (*width*, *height*, *pixels*, *meta*)
-
-        This method normally returns pixel values with the bit depth
-        they have in the source image, but when the source PNG has an
-        ``sBIT`` chunk it is inspected and can reduce the bit depth of
-        the result pixels; pixel values will be reduced according to
-        the bit depth specified in the ``sBIT`` chunk (PNG nerds should
-        note a single result bit depth is used for all channels; the
-        maximum of the ones specified in the ``sBIT`` chunk.  An RGB565
-        image will be rescaled to 6-bit RGB666).
-
-        The *meta* dictionary that is returned reflects the `direct`
-        format and not the original source image.  For example, an RGB
-        source image with a ``tRNS`` chunk to represent a transparent
-        colour, will have ``planes=3`` and ``alpha=False`` for the
-        source image, but the *meta* dictionary returned by this method
-        will have ``planes=4`` and ``alpha=True`` because an alpha
-        channel is synthesized and added.
-
-        *pixels* is the pixel data in boxed row flat pixel format (just
-        like the :meth:`read` method).
-
-        All the other aspects of the image data are not changed.
-        """
-
-        self.preamble()
-
-        # Simple case, no conversion necessary.
-        if not self.colormap and not self.trns and not self.sbit:
-            return self.read()
-
-        x,y,pixels,meta = self.read()
-
-        if self.colormap:
-            meta['colormap'] = False
-            meta['alpha'] = bool(self.trns)
-            meta['bitdepth'] = 8
-            meta['planes'] = 3 + bool(self.trns)
-            plte = self.palette()
-            def iterpal(pixels):
-                for row in pixels:
-                    row = map(plte.__getitem__, row)
-                    yield array('B', itertools.chain(*row))
-            pixels = iterpal(pixels)
-        elif self.trns:
-            # It would be nice if there was some reasonable way of doing
-            # this without generating a whole load of intermediate tuples.
-            # But tuples does seem like the easiest way, with no other way
-            # clearly much simpler or much faster.  (Actually, the L to LA
-            # conversion could perhaps go faster (all those 1-tuples!), but
-            # I still wonder whether the code proliferation is worth it)
-            it = self.transparent
-            maxval = 2**meta['bitdepth']-1
-            planes = meta['planes']
-            meta['alpha'] = True
-            meta['planes'] += 1
-            typecode = 'BH'[meta['bitdepth']>8]
-            def itertrns(pixels):
-                for row in pixels:
-                    # For each row we group it into pixels, then form a
-                    # characterisation vector that says whether each pixel
-                    # is opaque or not.  Then we convert True/False to
-                    # 0/maxval (by multiplication), and add it as the extra
-                    # channel.
-                    row = group(row, planes)
-                    opa = map(it.__ne__, row)
-                    opa = map(maxval.__mul__, opa)
-                    opa = zip(opa) # convert to 1-tuples
-                    yield array(typecode,
-                      itertools.chain(*map(operator.add, row, opa)))
-            pixels = itertrns(pixels)
-        targetbitdepth = None
-        if self.sbit:
-            sbit = struct.unpack('%dB' % len(self.sbit), self.sbit)
-            targetbitdepth = max(sbit)
-            if targetbitdepth > meta['bitdepth']:
-                raise Error('sBIT chunk %r exceeds bitdepth %d' %
-                    (sbit,self.bitdepth))
-            if min(sbit) <= 0:
-                raise Error('sBIT chunk %r has a 0-entry' % sbit)
-            if targetbitdepth == meta['bitdepth']:
-                targetbitdepth = None
-        if targetbitdepth:
-            shift = meta['bitdepth'] - targetbitdepth
-            meta['bitdepth'] = targetbitdepth
-            def itershift(pixels):
-                for row in pixels:
-                    yield map(shift.__rrshift__, row)
-            pixels = itershift(pixels)
-        return x,y,pixels,meta
-
-    def asFloat(self, maxval=1.0):
-        """Return image pixels as per :meth:`asDirect` method, but scale
-        all pixel values to be floating point values between 0.0 and
-        *maxval*.
-        """
-
-        x,y,pixels,info = self.asDirect()
-        sourcemaxval = 2**info['bitdepth']-1
-        del info['bitdepth']
-        info['maxval'] = float(maxval)
-        factor = float(maxval)/float(sourcemaxval)
-        def iterfloat():
-            for row in pixels:
-                yield map(factor.__mul__, row)
-        return x,y,iterfloat(),info
-
-    def _as_rescale(self, get, targetbitdepth):
-        """Helper used by :meth:`asRGB8` and :meth:`asRGBA8`."""
-
-        width,height,pixels,meta = get()
-        maxval = 2**meta['bitdepth'] - 1
-        targetmaxval = 2**targetbitdepth - 1
-        factor = float(targetmaxval) / float(maxval)
-        meta['bitdepth'] = targetbitdepth
-        def iterscale():
-            for row in pixels:
-                yield map(lambda x: int(round(x*factor)), row)
-        return width, height, iterscale(), meta
-
-    def asRGB8(self):
-        """Return the image data as an RGB pixels with 8-bits per
-        sample.  This is like the :meth:`asRGB` method except that
-        this method additionally rescales the values so that they
-        are all between 0 and 255 (8-bit).  In the case where the
-        source image has a bit depth < 8 the transformation preserves
-        all the information; where the source image has bit depth
-        > 8, then rescaling to 8-bit values loses precision.  No
-        dithering is performed.  Like :meth:`asRGB`, an alpha channel
-        in the source image will raise an exception.
-
-        This function returns a 4-tuple:
-        (*width*, *height*, *pixels*, *metadata*).
-        *width*, *height*, *metadata* are as per the :meth:`read` method.
-        
-        *pixels* is the pixel data in boxed row flat pixel format.
-        """
-
-        return self._as_rescale(self.asRGB, 8)
-
-    def asRGBA8(self):
-        """Return the image data as RGBA pixels with 8-bits per
-        sample.  This method is similar to :meth:`asRGB8` and
-        :meth:`asRGBA`:  The result pixels have an alpha channel, *and*
-        values are rescaled to the range 0 to 255.  The alpha channel is
-        synthesized if necessary (with a small speed penalty).
-        """
-
-        return self._as_rescale(self.asRGBA, 8)
-
-    def asRGB(self):
-        """Return image as RGB pixels.  RGB colour images are passed
-        through unchanged; greyscales are expanded into RGB
-        triplets (there is a small speed overhead for doing this).
-
-        An alpha channel in the source image will raise an
-        exception.
-
-        The return values are as for the :meth:`read` method
-        except that the *metadata* reflect the returned pixels, not the
-        source image.  In particular, for this method
-        ``metadata['greyscale']`` will be ``False``.
-        """
-
-        width,height,pixels,meta = self.asDirect()
-        if meta['alpha']:
-            raise Error("will not convert image with alpha channel to RGB")
-        if not meta['greyscale']:
-            return width,height,pixels,meta
-        meta['greyscale'] = False
-        typecode = 'BH'[meta['bitdepth'] > 8]
-        def iterrgb():
-            for row in pixels:
-                a = array(typecode, [0]) * 3 * width
-                for i in range(3):
-                    a[i::3] = row
-                yield a
-        return width,height,iterrgb(),meta
-
-    def asRGBA(self):
-        """Return image as RGBA pixels.  Greyscales are expanded into
-        RGB triplets; an alpha channel is synthesized if necessary.
-        The return values are as for the :meth:`read` method
-        except that the *metadata* reflect the returned pixels, not the
-        source image.  In particular, for this method
-        ``metadata['greyscale']`` will be ``False``, and
-        ``metadata['alpha']`` will be ``True``.
-        """
-
-        width,height,pixels,meta = self.asDirect()
-        if meta['alpha'] and not meta['greyscale']:
-            return width,height,pixels,meta
-        typecode = 'BH'[meta['bitdepth'] > 8]
-        maxval = 2**meta['bitdepth'] - 1
-        def newarray():
-            return array(typecode, [0]) * 4 * width
-        if meta['alpha'] and meta['greyscale']:
-            # LA to RGBA
-            def convert():
-                for row in pixels:
-                    # Create a fresh target row, then copy L channel
-                    # into first three target channels, and A channel
-                    # into fourth channel.
-                    a = newarray()
-                    for i in range(3):
-                        a[i::4] = row[0::2]
-                    a[3::4] = row[1::2]
-                    yield a
-        elif meta['greyscale']:
-            # L to RGBA
-            def convert():
-                for row in pixels:
-                    a = newarray()
-                    for i in range(3):
-                        a[i::4] = row
-                    a[3::4] = array(typecode, [maxval]) * width
-                    yield a
-        else:
-            assert not meta['alpha'] and not meta['greyscale']
-            # RGB to RGBA
-            def convert():
-                for row in pixels:
-                    a = newarray()
-                    for i in range(3):
-                        a[i::4] = row[i::3]
-                    a[3::4] = array(typecode, [maxval]) * width
-                    yield a
-        meta['alpha'] = True
-        meta['greyscale'] = False
-        return width,height,convert(),meta
-
-
-# === Legacy Version Support ===
-
-# :pyver:old:  PyPNG works on Python versions 2.3 and 2.2, but not
-# without some awkward problems.  Really PyPNG works on Python 2.4 (and
-# above); it works on Pythons 2.3 and 2.2 by virtue of fixing up
-# problems here.  It's a bit ugly (which is why it's hidden down here).
-#
-# Generally the strategy is one of pretending that we're running on
-# Python 2.4 (or above), and patching up the library support on earlier
-# versions so that it looks enough like Python 2.4.  When it comes to
-# Python 2.2 there is one thing we cannot patch: extended slices
-# http://www.python.org/doc/2.3/whatsnew/section-slices.html.
-# Instead we simply declare that features that are implemented using
-# extended slices will not work on Python 2.2.
-#
-# In order to work on Python 2.3 we fix up a recurring annoyance involving
-# the array type.  In Python 2.3 an array cannot be initialised with an
-# array, and it cannot be extended with a list (or other sequence).
-# Both of those are repeated issues in the code.  Whilst I would not
-# normally tolerate this sort of behaviour, here we "shim" a replacement
-# for array into place (and hope no-ones notices).  You never read this.
-#
-# In an amusing case of warty hacks on top of warty hacks... the array
-# shimming we try and do only works on Python 2.3 and above (you can't
-# subclass array.array in Python 2.2).  So to get it working on Python
-# 2.2 we go for something much simpler and (probably) way slower.
-try:
-    array('B').extend([])
-    array('B', array('B'))
-except:
-    # Expect to get here on Python 2.3
-    try:
-        class _array_shim(array):
-            true_array = array
-            def __new__(cls, typecode, init=None):
-                super_new = super(_array_shim, cls).__new__
-                it = super_new(cls, typecode)
-                if init is None:
-                    return it
-                it.extend(init)
-                return it
-            def extend(self, extension):
-                super_extend = super(_array_shim, self).extend
-                if isinstance(extension, self.true_array):
-                    return super_extend(extension)
-                if not isinstance(extension, (list, str)):
-                    # Convert to list.  Allows iterators to work.
-                    extension = list(extension)
-                return super_extend(self.true_array(self.typecode, extension))
-        array = _array_shim
-    except:
-        # Expect to get here on Python 2.2
-        def array(typecode, init=()):
-            if type(init) == str:
-                return map(ord, init)
-            return list(init)
-
-# Further hacks to get it limping along on Python 2.2
-try:
-    enumerate
-except:
-    def enumerate(seq):
-        i=0
-        for x in seq:
-            yield i,x
-            i += 1
-
-try:
-    reversed
-except:
-    def reversed(l):
-        l = list(l)
-        l.reverse()
-        for x in l:
-            yield x
-
-try:
-    itertools
-except:
-    class _dummy_itertools:
-        pass
-    itertools = _dummy_itertools()
-    def _itertools_imap(f, seq):
-        for x in seq:
-            yield f(x)
-    itertools.imap = _itertools_imap
-    def _itertools_chain(*iterables):
-        for it in iterables:
-            for element in it:
-                yield element
-    itertools.chain = _itertools_chain
-
-
-
-# === Internal Test Support ===
-
-# This section comprises the tests that are internally validated (as
-# opposed to tests which produce output files that are externally
-# validated).  Primarily they are unittests.
-
-# Note that it is difficult to internally validate the results of
-# writing a PNG file.  The only thing we can do is read it back in
-# again, which merely checks consistency, not that the PNG file we
-# produce is valid.
-
-# Run the tests from the command line:
-# python -c 'import png;png.test()'
-
-# (For an in-memory binary file IO object) We use BytesIO where
-# available, otherwise we use StringIO, but name it BytesIO.
-try:
-    from io import BytesIO
-except:
-    from StringIO import StringIO as BytesIO
-import tempfile
-# http://www.python.org/doc/2.4.4/lib/module-unittest.html
-import unittest
-
-
-def test():
-    unittest.main(__name__)
-
-def topngbytes(name, rows, x, y, **k):
-    """Convenience function for creating a PNG file "in memory" as a
-    string.  Creates a :class:`Writer` instance using the keyword arguments,
-    then passes `rows` to its :meth:`Writer.write` method.  The resulting
-    PNG file is returned as a string.  `name` is used to identify the file for
-    debugging.
-    """
-
-    import os
-
-    print name
-    f = BytesIO()
-    w = Writer(x, y, **k)
-    w.write(f, rows)
-    if os.environ.get('PYPNG_TEST_TMP'):
-        w = open(name, 'wb')
-        w.write(f.getvalue())
-        w.close()
-    return f.getvalue()
-
-def testWithIO(inp, out, f):
-    """Calls the function `f` with ``sys.stdin`` changed to `inp`
-    and ``sys.stdout`` changed to `out`.  They are restored when `f`
-    returns.  This function returns whatever `f` returns.
-    """
-
-    import os
-
-    try:
-        oldin,sys.stdin = sys.stdin,inp
-        oldout,sys.stdout = sys.stdout,out
-        x = f()
-    finally:
-        sys.stdin = oldin
-        sys.stdout = oldout
-    if os.environ.get('PYPNG_TEST_TMP') and hasattr(out,'getvalue'):
-        name = mycallersname()
-        if name:
-            w = open(name+'.png', 'wb')
-            w.write(out.getvalue())
-            w.close()
-    return x
-
-def mycallersname():
-    """Returns the name of the caller of the caller of this function
-    (hence the name of the caller of the function in which
-    "mycallersname()" textually appears).  Returns None if this cannot
-    be determined."""
-
-    # http://docs.python.org/library/inspect.html#the-interpreter-stack
-    import inspect
-
-    frame = inspect.currentframe()
-    if not frame:
-        return None
-    frame_,filename_,lineno_,funname,linelist_,listi_ = (
-      inspect.getouterframes(frame)[2])
-    return funname
-
-def seqtobytes(s):
-    """Convert a sequence of integers to a *bytes* instance.  Good for
-    plastering over Python 2 / Python 3 cracks.
-    """
-
-    return strtobytes(''.join(chr(x) for x in s))
-
-class Test(unittest.TestCase):
-    # This member is used by the superclass.  If we don't define a new
-    # class here then when we use self.assertRaises() and the PyPNG code
-    # raises an assertion then we get no proper traceback.  I can't work
-    # out why, but defining a new class here means we get a proper
-    # traceback.
-    class failureException(Exception):
-        pass
-
-    def helperLN(self, n):
-        mask = (1 << n) - 1
-        # Use small chunk_limit so that multiple chunk writing is
-        # tested.  Making it a test for Issue 20.
-        w = Writer(15, 17, greyscale=True, bitdepth=n, chunk_limit=99)
-        f = BytesIO()
-        w.write_array(f, array('B', map(mask.__and__, range(1, 256))))
-        r = Reader(bytes=f.getvalue())
-        x,y,pixels,meta = r.read()
-        self.assertEqual(x, 15)
-        self.assertEqual(y, 17)
-        self.assertEqual(list(itertools.chain(*pixels)),
-                         map(mask.__and__, range(1,256)))
-    def testL8(self):
-        return self.helperLN(8)
-    def testL4(self):
-        return self.helperLN(4)
-    def testL2(self):
-        "Also tests asRGB8."
-        w = Writer(1, 4, greyscale=True, bitdepth=2)
-        f = BytesIO()
-        w.write_array(f, array('B', range(4)))
-        r = Reader(bytes=f.getvalue())
-        x,y,pixels,meta = r.asRGB8()
-        self.assertEqual(x, 1)
-        self.assertEqual(y, 4)
-        for i,row in enumerate(pixels):
-            self.assertEqual(len(row), 3)
-            self.assertEqual(list(row), [0x55*i]*3)
-    def testP2(self):
-        "2-bit palette."
-        a = (255,255,255)
-        b = (200,120,120)
-        c = (50,99,50)
-        w = Writer(1, 4, bitdepth=2, palette=[a,b,c])
-        f = BytesIO()
-        w.write_array(f, array('B', (0,1,1,2)))
-        r = Reader(bytes=f.getvalue())
-        x,y,pixels,meta = r.asRGB8()
-        self.assertEqual(x, 1)
-        self.assertEqual(y, 4)
-        self.assertEqual(list(pixels), map(list, [a, b, b, c]))
-    def testPtrns(self):
-        "Test colour type 3 and tRNS chunk (and 4-bit palette)."
-        a = (50,99,50,50)
-        b = (200,120,120,80)
-        c = (255,255,255)
-        d = (200,120,120)
-        e = (50,99,50)
-        w = Writer(3, 3, bitdepth=4, palette=[a,b,c,d,e])
-        f = BytesIO()
-        w.write_array(f, array('B', (4, 3, 2, 3, 2, 0, 2, 0, 1)))
-        r = Reader(bytes=f.getvalue())
-        x,y,pixels,meta = r.asRGBA8()
-        self.assertEqual(x, 3)
-        self.assertEqual(y, 3)
-        c = c+(255,)
-        d = d+(255,)
-        e = e+(255,)
-        boxed = [(e,d,c),(d,c,a),(c,a,b)]
-        flat = map(lambda row: itertools.chain(*row), boxed)
-        self.assertEqual(map(list, pixels), map(list, flat))
-    def testRGBtoRGBA(self):
-        "asRGBA8() on colour type 2 source."""
-        # Test for Issue 26
-        r = Reader(bytes=_pngsuite['basn2c08'])
-        x,y,pixels,meta = r.asRGBA8()
-        # Test the pixels at row 9 columns 0 and 1.
-        row9 = list(pixels)[9]
-        self.assertEqual(row9[0:8],
-                         [0xff, 0xdf, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff])
-    def testLtoRGBA(self):
-        "asRGBA() on grey source."""
-        # Test for Issue 60
-        r = Reader(bytes=_pngsuite['basi0g08'])
-        x,y,pixels,meta = r.asRGBA()
-        row9 = list(list(pixels)[9])
-        self.assertEqual(row9[0:8],
-          [222, 222, 222, 255, 221, 221, 221, 255])
-    def testCtrns(self):
-        "Test colour type 2 and tRNS chunk."
-        # Test for Issue 25
-        r = Reader(bytes=_pngsuite['tbrn2c08'])
-        x,y,pixels,meta = r.asRGBA8()
-        # I just happen to know that the first pixel is transparent.
-        # In particular it should be #7f7f7f00
-        row0 = list(pixels)[0]
-        self.assertEqual(tuple(row0[0:4]), (0x7f, 0x7f, 0x7f, 0x00))
-    def testAdam7read(self):
-        """Adam7 interlace reading.
-        Specifically, test that for images in the PngSuite that
-        have both an interlaced and straightlaced pair that both
-        images from the pair produce the same array of pixels."""
-        for candidate in _pngsuite:
-            if not candidate.startswith('basn'):
-                continue
-            candi = candidate.replace('n', 'i')
-            if candi not in _pngsuite:
-                continue
-            print 'adam7 read', candidate
-            straight = Reader(bytes=_pngsuite[candidate])
-            adam7 = Reader(bytes=_pngsuite[candi])
-            # Just compare the pixels.  Ignore x,y (because they're
-            # likely to be correct?); metadata is ignored because the
-            # "interlace" member differs.  Lame.
-            straight = straight.read()[2]
-            adam7 = adam7.read()[2]
-            self.assertEqual(map(list, straight), map(list, adam7))
-    def testAdam7write(self):
-        """Adam7 interlace writing.
-        For each test image in the PngSuite, write an interlaced
-        and a straightlaced version.  Decode both, and compare results.
-        """
-        # Not such a great test, because the only way we can check what
-        # we have written is to read it back again.
-
-        for name,bytes in _pngsuite.items():
-            # Only certain colour types supported for this test.
-            if name[3:5] not in ['n0', 'n2', 'n4', 'n6']:
-                continue
-            it = Reader(bytes=bytes)
-            x,y,pixels,meta = it.read()
-            pngi = topngbytes('adam7wn'+name+'.png', pixels,
-              x=x, y=y, bitdepth=it.bitdepth,
-              greyscale=it.greyscale, alpha=it.alpha,
-              transparent=it.transparent,
-              interlace=False)
-            x,y,ps,meta = Reader(bytes=pngi).read()
-            it = Reader(bytes=bytes)
-            x,y,pixels,meta = it.read()
-            pngs = topngbytes('adam7wi'+name+'.png', pixels,
-              x=x, y=y, bitdepth=it.bitdepth,
-              greyscale=it.greyscale, alpha=it.alpha,
-              transparent=it.transparent,
-              interlace=True)
-            x,y,pi,meta = Reader(bytes=pngs).read()
-            self.assertEqual(map(list, ps), map(list, pi))
-    def testPGMin(self):
-        """Test that the command line tool can read PGM files."""
-        def do():
-            return _main(['testPGMin'])
-        s = BytesIO()
-        s.write(strtobytes('P5 2 2 3\n'))
-        s.write(strtobytes('\x00\x01\x02\x03'))
-        s.flush()
-        s.seek(0)
-        o = BytesIO()
-        testWithIO(s, o, do)
-        r = Reader(bytes=o.getvalue())
-        x,y,pixels,meta = r.read()
-        self.assertTrue(r.greyscale)
-        self.assertEqual(r.bitdepth, 2)
-    def testPAMin(self):
-        """Test that the command line tool can read PAM file."""
-        def do():
-            return _main(['testPAMin'])
-        s = BytesIO()
-        s.write(strtobytes('P7\nWIDTH 3\nHEIGHT 1\nDEPTH 4\nMAXVAL 255\n'
-                'TUPLTYPE RGB_ALPHA\nENDHDR\n'))
-        # The pixels in flat row flat pixel format
-        flat =  [255,0,0,255, 0,255,0,120, 0,0,255,30]
-        asbytes = seqtobytes(flat)
-        s.write(asbytes)
-        s.flush()
-        s.seek(0)
-        o = BytesIO()
-        testWithIO(s, o, do)
-        r = Reader(bytes=o.getvalue())
-        x,y,pixels,meta = r.read()
-        self.assertTrue(r.alpha)
-        self.assertTrue(not r.greyscale)
-        self.assertEqual(list(itertools.chain(*pixels)), flat)
-    def testLA4(self):
-        """Create an LA image with bitdepth 4."""
-        bytes = topngbytes('la4.png', [[5, 12]], 1, 1,
-          greyscale=True, alpha=True, bitdepth=4)
-        sbit = Reader(bytes=bytes).chunk('sBIT')[1]
-        self.assertEqual(sbit, strtobytes('\x04\x04'))
-    def testPNMsbit(self):
-        """Test that PNM files can generates sBIT chunk."""
-        def do():
-            return _main(['testPNMsbit'])
-        s = BytesIO()
-        s.write(strtobytes('P6 8 1 1\n'))
-        for pixel in range(8):
-            s.write(struct.pack('<I', (0x4081*pixel)&0x10101)[:3])
-        s.flush()
-        s.seek(0)
-        o = BytesIO()
-        testWithIO(s, o, do)
-        r = Reader(bytes=o.getvalue())
-        sbit = r.chunk('sBIT')[1]
-        self.assertEqual(sbit, strtobytes('\x01\x01\x01'))
-    def testLtrns0(self):
-        """Create greyscale image with tRNS chunk."""
-        return self.helperLtrns(0)
-    def testLtrns1(self):
-        """Using 1-tuple for transparent arg."""
-        return self.helperLtrns((0,))
-    def helperLtrns(self, transparent):
-        """Helper used by :meth:`testLtrns*`."""
-        pixels = zip([0x00, 0x38, 0x4c, 0x54, 0x5c, 0x40, 0x38, 0x00])
-        o = BytesIO()
-        w = Writer(8, 8, greyscale=True, bitdepth=1, transparent=transparent)
-        w.write_packed(o, pixels)
-        r = Reader(bytes=o.getvalue())
-        x,y,pixels,meta = r.asDirect()
-        self.assertTrue(meta['alpha'])
-        self.assertTrue(meta['greyscale'])
-        self.assertEqual(meta['bitdepth'], 1)
-    def testWinfo(self):
-        """Test the dictionary returned by a `read` method can be used
-        as args for :meth:`Writer`.
-        """
-        r = Reader(bytes=_pngsuite['basn2c16'])
-        info = r.read()[3]
-        w = Writer(**info)
-    def testPackedIter(self):
-        """Test iterator for row when using write_packed.
-
-        Indicative for Issue 47.
-        """
-        w = Writer(16, 2, greyscale=True, alpha=False, bitdepth=1)
-        o = BytesIO()
-        w.write_packed(o, [itertools.chain([0x0a], [0xaa]),
-                           itertools.chain([0x0f], [0xff])])
-        r = Reader(bytes=o.getvalue())
-        x,y,pixels,info = r.asDirect()
-        pixels = list(pixels)
-        self.assertEqual(len(pixels), 2)
-        self.assertEqual(len(pixels[0]), 16)
-    def testInterlacedArray(self):
-        """Test that reading an interlaced PNG yields each row as an
-        array."""
-        r = Reader(bytes=_pngsuite['basi0g08'])
-        list(r.read()[2])[0].tostring
-    def testTrnsArray(self):
-        """Test that reading a type 2 PNG with tRNS chunk yields each
-        row as an array (using asDirect)."""
-        r = Reader(bytes=_pngsuite['tbrn2c08'])
-        list(r.asDirect()[2])[0].tostring
-
-    # Invalid file format tests.  These construct various badly
-    # formatted PNG files, then feed them into a Reader.  When
-    # everything is working properly, we should get FormatError
-    # exceptions raised.
-    def testEmpty(self):
-        """Test empty file."""
-
-        r = Reader(bytes='')
-        self.assertRaises(FormatError, r.asDirect)
-    def testSigOnly(self):
-        """Test file containing just signature bytes."""
-
-        r = Reader(bytes=_signature)
-        self.assertRaises(FormatError, r.asDirect)
-    def testExtraPixels(self):
-        """Test file that contains too many pixels."""
-
-        def eachchunk(chunk):
-            if chunk[0] != 'IDAT':
-                return chunk
-            data = zlib.decompress(chunk[1])
-            data += strtobytes('\x00garbage')
-            data = zlib.compress(data)
-            chunk = (chunk[0], data)
-            return chunk
-        self.assertRaises(FormatError, self.helperFormat, eachchunk)
-    def testNotEnoughPixels(self):
-        def eachchunk(chunk):
-            if chunk[0] != 'IDAT':
-                return chunk
-            # Remove last byte.
-            data = zlib.decompress(chunk[1])
-            data = data[:-1]
-            data = zlib.compress(data)
-            return (chunk[0], data)
-        self.assertRaises(FormatError, self.helperFormat, eachchunk)
-    def helperFormat(self, f):
-        r = Reader(bytes=_pngsuite['basn0g01'])
-        o = BytesIO()
-        def newchunks():
-            for chunk in r.chunks():
-                yield f(chunk)
-        write_chunks(o, newchunks())
-        r = Reader(bytes=o.getvalue())
-        return list(r.asDirect()[2])
-    def testBadFilter(self):
-        def eachchunk(chunk):
-            if chunk[0] != 'IDAT':
-                return chunk
-            data = zlib.decompress(chunk[1])
-            # Corrupt the first filter byte
-            data = strtobytes('\x99') + data[1:]
-            data = zlib.compress(data)
-            return (chunk[0], data)
-        self.assertRaises(FormatError, self.helperFormat, eachchunk)
-    def testFlat(self):
-        """Test read_flat."""
-        import hashlib
-
-        r = Reader(bytes=_pngsuite['basn0g02'])
-        x,y,pixel,meta = r.read_flat()
-        d = hashlib.md5(seqtobytes(pixel)).digest()
-        self.assertEqual(_enhex(d), '255cd971ab8cd9e7275ff906e5041aa0')
-    def testfromarray(self):
-        img = from_array([[0, 0x33, 0x66], [0xff, 0xcc, 0x99]], 'L')
-        img.save('testfromarray.png')
-    def testfromarrayL16(self):
-        img = from_array(group(range(2**16), 256), 'L;16')
-        img.save('testL16.png')
-    def testfromarrayRGB(self):
-        img = from_array([[0,0,0, 0,0,1, 0,1,0, 0,1,1],
-                          [1,0,0, 1,0,1, 1,1,0, 1,1,1]], 'RGB;1')
-        o = BytesIO()
-        img.save(o)
-    def testfromarrayIter(self):
-        import itertools
-
-        i = itertools.islice(itertools.count(10), 20)
-        i = itertools.imap(lambda x: [x, x, x], i)
-        img = from_array(i, 'RGB;5', dict(height=20))
-        f = open('testiter.png', 'wb')
-        img.save(f)
-        f.close()
-
-    # numpy dependent tests.  These are skipped (with a message to
-    # sys.stderr) if numpy cannot be imported.
-    def testNumpyuint16(self):
-        """numpy uint16."""
-
-        try:
-            import numpy
-        except ImportError:
-            print >>sys.stderr, "skipping numpy test"
-            return
-
-        rows = [map(numpy.uint16, range(0,0x10000,0x5555))]
-        b = topngbytes('numpyuint16.png', rows, 4, 1,
-            greyscale=True, alpha=False, bitdepth=16)
-    def testNumpyuint8(self):
-        """numpy uint8."""
-
-        try:
-            import numpy
-        except ImportError:
-            print >>sys.stderr, "skipping numpy test"
-            return
-
-        rows = [map(numpy.uint8, range(0,0x100,0x55))]
-        b = topngbytes('numpyuint8.png', rows, 4, 1,
-            greyscale=True, alpha=False, bitdepth=8)
-    def testNumpybool(self):
-        """numpy bool."""
-
-        try:
-            import numpy
-        except ImportError:
-            print >>sys.stderr, "skipping numpy test"
-            return
-
-        rows = [map(numpy.bool, [0,1])]
-        b = topngbytes('numpybool.png', rows, 2, 1,
-            greyscale=True, alpha=False, bitdepth=1)
-    def testNumpyarray(self):
-        """numpy array."""
-        try:
-            import numpy
-        except ImportError:
-            print >>sys.stderr, "skipping numpy test"
-            return
-
-        pixels = numpy.array([[0,0x5555],[0x5555,0xaaaa]], numpy.uint16)
-        img = from_array(pixels, 'L')
-        img.save('testnumpyL16.png')
-
-# === Command Line Support ===
-
-def _dehex(s):
-    """Liberally convert from hex string to binary string."""
-    import re
-    import binascii
-
-    # Remove all non-hexadecimal digits
-    s = re.sub(r'[^a-fA-F\d]', '', s)
-    # binscii.unhexlify works in Python 2 and Python 3 (unlike
-    # thing.decode('hex')).
-    return binascii.unhexlify(strtobytes(s))
-def _enhex(s):
-    """Convert from binary string (bytes) to hex string (str)."""
-
-    import binascii
-
-    return bytestostr(binascii.hexlify(s))
-
-# Copies of PngSuite test files taken
-# from http://www.schaik.com/pngsuite/pngsuite_bas_png.html
-# on 2009-02-19 by drj and converted to hex.
-# Some of these are not actually in PngSuite (but maybe they should
-# be?), they use the same naming scheme, but start with a capital
-# letter.
-_pngsuite = {
-  'basi0g01': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002001000000012c0677
-cf0000000467414d41000186a031e8965f0000009049444154789c2d8d310ec2
-300c45dfc682c415187a00a42e197ab81e83b127e00c5639001363a580d8582c
-65c910357c4b78b0bfbfdf4f70168c19e7acb970a3f2d1ded9695ce5bf5963df
-d92aaf4c9fd927ea449e6487df5b9c36e799b91bdf082b4d4bd4014fe4014b01
-ab7a17aee694d28d328a2d63837a70451e1648702d9a9ff4a11d2f7a51aa21e5
-a18c7ffd0094e3511d661822f20000000049454e44ae426082
-"""),
-  'basi0g02': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002002000000016ba60d
-1f0000000467414d41000186a031e8965f0000005149444154789c635062e860
-00e17286bb609c93c370ec189494960631366e4467b3ae675dcf10f521ea0303
-90c1ca006444e11643482064114a4852c710baea3f18c31918020c30410403a6
-0ac1a09239009c52804d85b6d97d0000000049454e44ae426082
-"""),
-  'basi0g04': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200400000001e4e6f8
-bf0000000467414d41000186a031e8965f000000ae49444154789c658e5111c2
-301044171c141c141c041c843a287510ea20d441c041c141c141c04191102454
-03994998cecd7edcecedbb9bdbc3b2c2b6457545fbc4bac1be437347f7c66a77
-3c23d60db15e88f5c5627338a5416c2e691a9b475a89cd27eda12895ae8dfdab
-43d61e590764f5c83a226b40d669bec307f93247701687723abf31ff83a2284b
-a5b4ae6b63ac6520ad730ca4ed7b06d20e030369bd6720ed383290360406d24e
-13811f2781eba9d34d07160000000049454e44ae426082
-"""),
-  'basi0g08': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200800000001211615
-be0000000467414d41000186a031e8965f000000b549444154789cb5905d0ac2
-3010849dbac81c42c47bf843cf253e8878b0aa17110f214bdca6be240f5d21a5
-94ced3e49bcd322c1624115515154998aa424822a82a5624a1aa8a8b24c58f99
-999908130989a04a00d76c2c09e76cf21adcb209393a6553577da17140a2c59e
-70ecbfa388dff1f03b82fb82bd07f05f7cb13f80bb07ad2fd60c011c3c588eef
-f1f4e03bbec7ce832dca927aea005e431b625796345307b019c845e6bfc3bb98
-769d84f9efb02ea6c00f9bb9ff45e81f9f280000000049454e44ae426082
-"""),
-  'basi0g16': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002010000000017186c9
-fd0000000467414d41000186a031e8965f000000e249444154789cb5913b0ec2
-301044c7490aa8f85d81c3e4301c8f53a4ca0da8902c8144b3920b4043111282
-23bc4956681a6bf5fc3c5a3ba0448912d91a4de2c38dd8e380231eede4c4f7a1
-4677700bec7bd9b1d344689315a3418d1a6efbe5b8305ba01f8ff4808c063e26
-c60d5c81edcf6c58c535e252839e93801b15c0a70d810ae0d306b205dc32b187
-272b64057e4720ff0502154034831520154034c3df81400510cdf0015c86e5cc
-5c79c639fddba9dcb5456b51d7980eb52d8e7d7fa620a75120d6064641a05120
-b606771a05626b401a05f1f589827cf0fe44c1f0bae0055698ee8914fffffe00
-00000049454e44ae426082
-"""),
-  'basi2c08': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002008020000018b1fdd
-350000000467414d41000186a031e8965f000000f249444154789cd59341aa04
-210c44abc07b78133d59d37333bd89d76868b566d10cf4675af8596431a11662
-7c5688919280e312257dd6a0a4cf1a01008ee312a5f3c69c37e6fcc3f47e6776
-a07f8bdaf5b40feed2d33e025e2ff4fe2d4a63e1a16d91180b736d8bc45854c5
-6d951863f4a7e0b66dcf09a900f3ffa2948d4091e53ca86c048a64390f662b50
-4a999660ced906182b9a01a8be00a56404a6ede182b1223b4025e32c4de34304
-63457680c93aada6c99b73865aab2fc094920d901a203f5ddfe1970d28456783
-26cffbafeffcd30654f46d119be4793f827387fc0d189d5bc4d69a3c23d45a7f
-db803146578337df4d0a3121fc3d330000000049454e44ae426082
-"""),
-  'basi2c16': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000201002000001db8f01
-760000000467414d41000186a031e8965f0000020a49444154789cd5962173e3
-3010853fcf1838cc61a1818185a53e56787fa13fa130852e3b5878b4b0b03081
-b97f7030070b53e6b057a0a8912bbb9163b9f109ececbc59bd7dcf2b45492409
-d66f00eb1dd83cb5497d65456aeb8e1040913b3b2c04504c936dd5a9c7e2c6eb
-b1b8f17a58e8d043da56f06f0f9f62e5217b6ba3a1b76f6c9e99e8696a2a72e2
-c4fb1e4d452e92ec9652b807486d12b6669be00db38d9114b0c1961e375461a5
-5f76682a85c367ad6f682ff53a9c2a353191764b78bb07d8ddc3c97c1950f391
-6745c7b9852c73c2f212605a466a502705c8338069c8b9e84efab941eb393a97
-d4c9fd63148314209f1c1d3434e847ead6380de291d6f26a25c1ebb5047f5f24
-d85c49f0f22cc1d34282c72709cab90477bf25b89d49f0f351822297e0ea9704
-f34c82bc94002448ede51866e5656aef5d7c6a385cb4d80e6a538ceba04e6df2
-480e9aa84ddedb413bb5c97b3838456df2d4fec2c7a706983e7474d085fae820
-a841776a83073838973ac0413fea2f1dc4a06e71108fda73109bdae48954ad60
-bf867aac3ce44c7c1589a711cf8a81df9b219679d96d1cec3d8bbbeaa2012626
-df8c7802eda201b2d2e0239b409868171fc104ba8b76f10b4da09f6817ffc609
-c413ede267fd1fbab46880c90f80eccf0013185eb48b47ba03df2bdaadef3181
-cb8976f18e13188768170f98c0f844bb78cb04c62ddac59d09fc3fa25dfc1da4
-14deb3df1344f70000000049454e44ae426082
-"""),
-  'basi3p08': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020080300000133a3ba
-500000000467414d41000186a031e8965f00000300504c5445224400f5ffed77
-ff77cbffff110a003a77002222ffff11ff110000222200ffac5566ff66ff6666
-ff01ff221200dcffffccff994444ff005555220000cbcbff44440055ff55cbcb
-00331a00ffecdcedffffe4ffcbffdcdc44ff446666ff330000442200ededff66
-6600ffa444ffffaaeded0000cbcbfefffffdfffeffff0133ff33552a000101ff
-8888ff00aaaa010100440000888800ffe4cbba5b0022ff22663200ffff99aaaa
-ff550000aaaa00cb630011ff11d4ffaa773a00ff4444dc6b0066000001ff0188
-4200ecffdc6bdc00ffdcba00333300ed00ed7300ffff88994a0011ffff770000
-ff8301ffbabafe7b00fffeff00cb00ff999922ffff880000ffff77008888ffdc
-ff1a33000000aa33ffff009900990000000001326600ffbaff44ffffffaaff00
-770000fefeaa00004a9900ffff66ff22220000998bff1155ffffff0101ff88ff
-005500001111fffffefffdfea4ff4466ffffff66ff003300ffff55ff77770000
-88ff44ff00110077ffff006666ffffed000100fff5ed1111ffffff44ff22ffff
-eded11110088ffff00007793ff2200dcdc3333fffe00febabaff99ffff333300
-63cb00baba00acff55ffffdcffff337bfe00ed00ed5555ffaaffffdcdcff5555
-00000066dcdc00dc00dc83ff017777fffefeffffffcbff5555777700fefe00cb
-00cb0000fe010200010000122200ffff220044449bff33ffd4aa0000559999ff
-999900ba00ba2a5500ffcbcbb4ff66ff9b33ffffbaaa00aa42880053aa00ffaa
-aa0000ed00babaffff1100fe00000044009999990099ffcc99ba000088008800
-dc00ff93220000dcfefffeaa5300770077020100cb0000000033ffedff00ba00
-ff3333edffedffc488bcff7700aa00660066002222dc0000ffcbffdcffdcff8b
-110000cb00010155005500880000002201ffffcbffcbed0000ff88884400445b
-ba00ffbc77ff99ff006600baffba00777773ed00fe00003300330000baff77ff
-004400aaffaafffefe000011220022c4ff8800eded99ff99ff55ff002200ffb4
-661100110a1100ff1111dcffbabaffff88ff88010001ff33ffb98ed362000002
-a249444154789c65d0695c0b001806f03711a9904a94d24dac63292949e5a810
-d244588a14ca5161d1a1323973252242d62157d12ae498c8124d25ca3a11398a
-16e55a3cdffab0ffe7f77d7fcff3528645349b584c3187824d9d19d4ec2e3523
-9eb0ae975cf8de02f2486d502191841b42967a1ad49e5ddc4265f69a899e26b5
-e9e468181baae3a71a41b95669da8df2ea3594c1b31046d7b17bfb86592e4cbe
-d89b23e8db0af6304d756e60a8f4ad378bdc2552ae5948df1d35b52143141533
-33bbbbababebeb3b3bc9c9c9c6c6c0c0d7b7b535323225a5aa8a02024a4bedec
-0a0a2a2bcdcd7d7cf2f3a9a9c9cdcdd8b8adcdd5b5ababa828298982824a4ab2
-b21212acadbdbc1414e2e24859b9a72730302f4f49292c4c57373c9c0a0b7372
-8c8c1c1c3a3a92936d6dfdfd293e3e26262a4a4eaea2424b4b5fbfbc9c323278
-3c0b0ba1303abaae8ecdeeed950d6669a9a7a7a141d4de9e9d5d5cdcd2229b94
-c572716132f97cb1d8db9bc3110864a39795d9db6b6a26267a7a9a98d4d6a6a7
-cb76090ef6f030354d4d75766e686030545464cb393a1a1ac6c68686eae8f8f9
-a9aa4644c8b66d6e1689dcdd2512a994cb35330b0991ad9f9b6b659596a6addd
-d8282fafae5e5323fb8f41d01f76c22fd8061be01bfc041a0323e1002c81cd30
-0b9ec027a0c930014ec035580fc3e112bc069a0b53e11c0c8095f00176c163a0
-e5301baec06a580677600ddc05ba0f13e120bc81a770133ec355a017300d4ec2
-0c7800bbe1219c02fa08f3e13c1c85dbb00a2ec05ea0dff00a6ec15a98027360
-070c047a06d7e1085c84f1b014f6c03fa0b33018b6c0211801ebe018fc00da0a
-6f61113c877eb01d4ec317a085700f26c130f80efbe132bc039a0733e106fc81
-f7f017f6c10aa0d1300a0ec374780943e1382c06fa0a9b60238c83473016cec0
-02f80f73fefe1072afc1e50000000049454e44ae426082
-"""),
-  'basi6a08': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200806000001047d4a
-620000000467414d41000186a031e8965f0000012049444154789cc595414ec3
-3010459fa541b8bbb26641b8069b861e8b4d12c1c112c1452a710a2a65d840d5
-949041fc481ec98ae27c7f3f8d27e3e4648047600fec0d1f390fbbe2633a31e2
-9389e4e4ea7bfdbf3d9a6b800ab89f1bd6b553cfcbb0679e960563d72e0a9293
-b7337b9f988cc67f5f0e186d20e808042f1c97054e1309da40d02d7e27f92e03
-6cbfc64df0fc3117a6210a1b6ad1a00df21c1abcf2a01944c7101b0cb568a001
-909c9cf9e399cf3d8d9d4660a875405d9a60d000b05e2de55e25780b7a5268e0
-622118e2399aab063a815808462f1ab86890fc2e03e48bb109ded7d26ce4bf59
-0db91bac0050747fec5015ce80da0e5700281be533f0ce6d5900b59bcb00ea6d
-200314cf801faab200ea752803a8d7a90c503a039f824a53f4694e7342000000
-0049454e44ae426082
-"""),
-  'basn0g01': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002001000000005b0147
-590000000467414d41000186a031e8965f0000005b49444154789c2dccb10903
-300c05d1ebd204b24a200b7a346f90153c82c18d0a61450751f1e08a2faaead2
-a4846ccea9255306e753345712e211b221bf4b263d1b427325255e8bdab29e6f
-6aca30692e9d29616ee96f3065f0bf1f1087492fd02f14c90000000049454e44
-ae426082
-"""),
-  'basn0g02': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002002000000001ca13d
-890000000467414d41000186a031e8965f0000001f49444154789c6360085df5
-1f8cf1308850c20053868f0133091f6390b90700bd497f818b0989a900000000
-49454e44ae426082
-"""),
-  # A version of basn0g04 dithered down to 3 bits.
-  'Basn0g03': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020040000000093e1c8
-2900000001734249540371d88211000000fd49444154789c6d90d18906210c84
-c356f22356b2889588604301b112112b11d94a96bb495cf7fe87f32d996f2689
-44741cc658e39c0b118f883e1f63cc89dafbc04c0f619d7d898396c54b875517
-83f3a2e7ac09a2074430e7f497f00f1138a5444f82839c5206b1f51053cca968
-63258821e7f2b5438aac16fbecc052b646e709de45cf18996b29648508728612
-952ca606a73566d44612b876845e9a347084ea4868d2907ff06be4436c4b41a3
-a3e1774285614c5affb40dbd931a526619d9fa18e4c2be420858de1df0e69893
-a0e3e5523461be448561001042b7d4a15309ce2c57aef2ba89d1c13794a109d7
-b5880aa27744fc5c4aecb5e7bcef5fe528ec6293a930690000000049454e44ae
-426082
-"""),
-  'basn0g04': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020040000000093e1c8
-290000000467414d41000186a031e8965f0000004849444154789c6360601014
-545232367671090d4d4b2b2f6720430095dbd1418e002a77e64c720450b9ab56
-912380caddbd9b1c0154ee9933e408a072efde25470095fbee1d1902001f14ee
-01eaff41fa0000000049454e44ae426082
-"""),
-  'basn0g08': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200800000000561125
-280000000467414d41000186a031e8965f0000004149444154789c6364602400
-1408c8b30c05058c0f0829f8f71f3f6079301c1430ca11906764a2795c0c0605
-8c8ff0cafeffcff887e67131181430cae0956564040050e5fe7135e2d8590000
-000049454e44ae426082
-"""),
-  'basn0g16': _dehex("""
-89504e470d0a1a0a0000000d49484452000000200000002010000000000681f9
-6b0000000467414d41000186a031e8965f0000005e49444154789cd5d2310ac0
-300c4351395bef7fc6dca093c0287b32d52a04a3d98f3f3880a7b857131363a0
-3a82601d089900dd82f640ca04e816dc06422640b7a03d903201ba05b7819009
-d02d680fa44c603f6f07ec4ff41938cf7f0016d84bd85fae2b9fd70000000049
-454e44ae426082
-"""),
-  'basn2c08': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200802000000fc18ed
-a30000000467414d41000186a031e8965f0000004849444154789cedd5c10900
-300c024085ec91fdb772133b442bf4a1f8cee12bb40d043b800a14f81ca0ede4
-7d4c784081020f4a871fc284071428f0a0743823a94081bb7077a3c00182b1f9
-5e0f40cf4b0000000049454e44ae426082
-"""),
-  'basn2c16': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000201002000000ac8831
-e00000000467414d41000186a031e8965f000000e549444154789cd596c10a83
-301044a7e0417fcb7eb7fdadf6961e06039286266693cc7a188645e43dd6a08f
-1042003e2fe09aef6472737e183d27335fcee2f35a77b702ebce742870a23397
-f3edf2705dd10160f3b2815fe8ecf2027974a6b0c03f74a6e4192843e75c6c03
-35e8ec3202f5e84c0181bbe8cca967a00d9df3491bb040671f2e6087ce1c2860
-8d1e05f8c7ee0f1d00b667e70df44467ef26d01fbd9bc028f42860f71d188bce
-fb8d3630039dbd59601e7ab3c06cf428507f0634d039afdc80123a7bb1801e7a
-b1802a7a14c89f016d74ce331bf080ce9e08f8414f04bca133bfe642fe5e07bb
-c4ec0000000049454e44ae426082
-"""),
-  'basn6a08': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7a
-f40000000467414d41000186a031e8965f0000006f49444154789cedd6310a80
-300c46e12764684fa1f73f55048f21c4ddc545781d52e85028fc1f4d28d98a01
-305e7b7e9cffba33831d75054703ca06a8f90d58a0074e351e227d805c8254e3
-1bb0420f5cdc2e0079208892ffe2a00136a07b4007943c1004d900195036407f
-011bf00052201a9c160fb84c0000000049454e44ae426082
-"""),
-  'cs3n3p08': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020080300000044a48a
-c60000000467414d41000186a031e8965f0000000373424954030303a392a042
-00000054504c544592ff0000ff9200ffff00ff0000dbff00ff6dffb600006dff
-b6ff00ff9200dbff000049ffff2400ff000024ff0049ff0000ffdb00ff4900ff
-b6ffff0000ff2400b6ffffdb000092ffff6d000024ffff49006dff00df702b17
-0000004b49444154789c85cac70182000000b1b3625754b0edbfa72324ef7486
-184ed0177a437b680bcdd0031c0ed00ea21f74852ed00a1c9ed0086da0057487
-6ed0121cd6d004bda0013a421ff803224033e177f4ae260000000049454e44ae
-426082
-"""),
-  's09n3p02': _dehex("""
-89504e470d0a1a0a0000000d49484452000000090000000902030000009dffee
-830000000467414d41000186a031e8965f000000037342495404040477f8b5a3
-0000000c504c544500ff000077ffff00ffff7700ff5600640000001f49444154
-789c63600002fbff0c0c56ab19182ca381581a4283f82071200000696505c36a
-437f230000000049454e44ae426082
-"""),
-  'tbgn3p08': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020080300000044a48a
-c60000000467414d41000186a031e8965f00000207504c54457f7f7fafafafab
-abab110000222200737300999999510d00444400959500959595e6e600919191
-8d8d8d620d00898989666600b7b700911600000000730d007373736f6f6faaaa
-006b6b6b676767c41a00cccc0000f30000ef00d51e0055555567670000dd0051
-515100d1004d4d4de61e0038380000b700160d0d00ab00560d00090900009500
-009100008d003333332f2f2f2f2b2f2b2b000077007c7c001a05002b27000073
-002b2b2b006f00bb1600272727780d002323230055004d4d00cc1e00004d00cc
-1a000d00003c09006f6f00002f003811271111110d0d0d55554d090909001100
-4d0900050505000d00e2e200000900000500626200a6a6a6a2a2a29e9e9e8484
-00fb00fbd5d500801100800d00ea00ea555500a6a600e600e6f7f700e200e233
-0500888888d900d9848484c01a007777003c3c05c8c8008080804409007c7c7c
-bb00bbaa00aaa600a61e09056262629e009e9a009af322005e5e5e05050000ee
-005a5a5adddd00a616008d008d00e20016050027270088110078780000c40078
-00787300736f006f44444400aa00c81e004040406600663c3c3c090000550055
-1a1a00343434d91e000084004d004d007c004500453c3c00ea1e00222222113c
-113300331e1e1efb22001a1a1a004400afaf00270027003c001616161e001e0d
-160d2f2f00808000001e00d1d1001100110d000db7b7b7090009050005b3b3b3
-6d34c4230000000174524e530040e6d86600000001624b474402660b7c640000
-01f249444154789c6360c0048c8c58049100575f215ee92e6161ef109cd2a15e
-4b9645ce5d2c8f433aa4c24f3cbd4c98833b2314ab74a186f094b9c2c27571d2
-6a2a58e4253c5cda8559057a392363854db4d9d0641973660b0b0bb76bb16656
-06970997256877a07a95c75a1804b2fbcd128c80b482a0b0300f8a824276a9a8
-ec6e61612b3e57ee06fbf0009619d5fac846ac5c60ed20e754921625a2daadc6
-1967e29e97d2239c8aec7e61fdeca9cecebef54eb36c848517164514af16169e
-866444b2b0b7b55534c815cc2ec22d89cd1353800a8473100a4485852d924a6a
-412adc74e7ad1016ceed043267238c901716f633a812022998a4072267c4af02
-92127005c0f811b62830054935ce017b38bf0948cc5c09955f030a24617d9d46
-63371fd940b0827931cbfdf4956076ac018b592f72d45594a9b1f307f3261b1a
-084bc2ad50018b1900719ba6ba4ca325d0427d3f6161449486f981144cf3100e
-2a5f2a1ce8683e4ddf1b64275240c8438d98af0c729bbe07982b8a1c94201dc2
-b3174c9820bcc06201585ad81b25b64a2146384e3798290c05ad280a18c0a62e
-e898260c07fca80a24c076cc864b777131a00190cdfa3069035eccbc038c30e1
-3e88b46d16b6acc5380d6ac202511c392f4b789aa7b0b08718765990111606c2
-9e854c38e5191878fbe471e749b0112bb18902008dc473b2b2e8e72700000000
-49454e44ae426082
-"""),
-  'Tp2n3p08': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020080300000044a48a
-c60000000467414d41000186a031e8965f00000300504c544502ffff80ff05ff
-7f0703ff7f0180ff04ff00ffff06ff000880ff05ff7f07ffff06ff000804ff00
-0180ff02ffff03ff7f02ffff80ff0503ff7f0180ffff0008ff7f0704ff00ffff
-06ff000802ffffff7f0704ff0003ff7fffff0680ff050180ff04ff000180ffff
-0008ffff0603ff7f80ff05ff7f0702ffffff000880ff05ffff0603ff7f02ffff
-ff7f070180ff04ff00ffff06ff000880ff050180ffff7f0702ffff04ff0003ff
-7fff7f0704ff0003ff7f0180ffffff06ff000880ff0502ffffffff0603ff7fff
-7f0702ffff04ff000180ff80ff05ff0008ff7f07ffff0680ff0504ff00ff0008
-0180ff03ff7f02ffff02ffffffff0604ff0003ff7f0180ffff000880ff05ff7f
-0780ff05ff00080180ff02ffffff7f0703ff7fffff0604ff00ff7f07ff0008ff
-ff0680ff0504ff0002ffff0180ff03ff7fff0008ffff0680ff0504ff000180ff
-02ffff03ff7fff7f070180ff02ffff04ff00ffff06ff0008ff7f0780ff0503ff
-7fffff06ff0008ff7f0780ff0502ffff03ff7f0180ff04ff0002ffffff7f07ff
-ff0604ff0003ff7fff00080180ff80ff05ffff0603ff7f0180ffff000804ff00
-80ff0502ffffff7f0780ff05ffff0604ff000180ffff000802ffffff7f0703ff
-7fff0008ff7f070180ff03ff7f02ffff80ff05ffff0604ff00ff0008ffff0602
-ffff0180ff04ff0003ff7f80ff05ff7f070180ff04ff00ff7f0780ff0502ffff
-ff000803ff7fffff0602ffffff7f07ffff0680ff05ff000804ff0003ff7f0180
-ff02ffff0180ffff7f0703ff7fff000804ff0080ff05ffff0602ffff04ff00ff
-ff0603ff7fff7f070180ff80ff05ff000803ff7f0180ffff7f0702ffffff0008
-04ff00ffff0680ff0503ff7f0180ff04ff0080ff05ffff06ff000802ffffff7f
-0780ff05ff0008ff7f070180ff03ff7f04ff0002ffffffff0604ff00ff7f07ff
-000880ff05ffff060180ff02ffff03ff7f80ff05ffff0602ffff0180ff03ff7f
-04ff00ff7f07ff00080180ffff000880ff0502ffff04ff00ff7f0703ff7fffff
-06ff0008ffff0604ff00ff7f0780ff0502ffff03ff7f0180ffdeb83387000000
-f874524e53000000000000000008080808080808081010101010101010181818
-1818181818202020202020202029292929292929293131313131313131393939
-393939393941414141414141414a4a4a4a4a4a4a4a52525252525252525a5a5a
-5a5a5a5a5a62626262626262626a6a6a6a6a6a6a6a73737373737373737b7b7b
-7b7b7b7b7b83838383838383838b8b8b8b8b8b8b8b94949494949494949c9c9c
-9c9c9c9c9ca4a4a4a4a4a4a4a4acacacacacacacacb4b4b4b4b4b4b4b4bdbdbd
-bdbdbdbdbdc5c5c5c5c5c5c5c5cdcdcdcdcdcdcdcdd5d5d5d5d5d5d5d5dedede
-dededededee6e6e6e6e6e6e6e6eeeeeeeeeeeeeeeef6f6f6f6f6f6f6f6b98ac5
-ca0000012c49444154789c6360e7169150d230b475f7098d4ccc28a96ced9e32
-63c1da2d7b8e9fb97af3d1fb8f3f18e8a0808953544a4dd7c4c2c9233c2621bf
-b4aab17fdacce5ab36ee3a72eafaad87efbefea68702362e7159652d031b07cf
-c0b8a4cce28aa68e89f316aedfb4ffd0b92bf79fbcfcfe931e0a183904e55435
-8decdcbcc22292b3caaadb7b27cc5db67af3be63e72fdf78fce2d31f7a2860e5
-119356d037b374f10e8a4fc92eaa6fee99347fc9caad7b0f9ebd74f7c1db2fbf
-e8a180995f484645dbdccad12f38363dafbcb6a573faeca5ebb6ed3e7ce2c29d
-e76fbefda38702063e0149751d537b67ff80e8d4dcc29a86bea97316add9b0e3
-c0e96bf79ebdfafc971e0a587885e515f58cad5d7d43a2d2720aeadaba26cf5a
-bc62fbcea3272fde7efafac37f3a28000087c0fe101bc2f85f0000000049454e
-44ae426082
-"""),
-  'tbbn1g04': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020040000000093e1c8
-290000000467414d41000186a031e8965f0000000274524e530007e8f7589b00
-000002624b47440000aa8d23320000013e49444154789c55d1cd4b024118c7f1
-efbe6419045b6a48a72d352808b435284f9187ae9b098627a1573a19945beba5
-e8129e8222af11d81e3a4545742de8ef6af6d5762e0fbf0fc33c33f36085cb76
-bc4204778771b867260683ee57e13f0c922df5c719c2b3b6c6c25b2382cea4b9
-9f7d4f244370746ac71f4ca88e0f173a6496749af47de8e44ba8f3bf9bdfa98a
-0faf857a7dd95c7dc8d7c67c782c99727997f41eb2e3c1e554152465bb00fe8e
-b692d190b718d159f4c0a45c4435915a243c58a7a4312a7a57913f05747594c6
-46169866c57101e4d4ce4d511423119c419183a3530cc63db88559ae28e7342a
-1e9c8122b71139b8872d6e913153224bc1f35b60e4445bd4004e20ed6682c759
-1d9873b3da0fbf50137dc5c9bde84fdb2ec8bde1189e0448b63584735993c209
-7a601bd2710caceba6158797285b7f2084a2f82c57c01a0000000049454e44ae
-426082
-"""),
-  'tbrn2c08': _dehex("""
-89504e470d0a1a0a0000000d4948445200000020000000200802000000fc18ed
-a30000000467414d41000186a031e8965f0000000674524e53007f007f007f8a
-33334f00000006624b474400ff0000000033277cf3000004d649444154789cad
-965f68537714c73fd912d640235e692f34d0406fa0c1663481045ab060065514
-56660a295831607df0a1488715167060840a1614e6431e9cb34fd2c00a762c85
-f6a10f816650c13b0cf40612e1822ddc4863bd628a8924d23d6464f9d3665dd9
-f7e977ce3dbff3cd3939bfdfef6bb87dfb364782dbed065ebe7cd93acc78b4ec
-a228debd7bb7bfbfbfbbbbfb7f261045311a8d261209405194274f9ea4d3e916
-f15f1c3eb5dd6e4fa5fecce526239184a2b0b8486f6f617171b1f5ae4311381c
-8e57af5e5dbd7a351088150a78bd389d44222c2f93cdfe66b7db8f4ee07038b6
-b6b6bebf766d7e7e7e60a06432313b4ba984c3c1c4049a46b95c5a58583822c1
-dbb76f27272733d1b9df853c3030c0f232562b9108cf9eb1b888d7cbf030abab
-31abd5fa1f08dc6ef7e7cf9f1f3f7e1c8944745d4f1400c62c001313acad21cb
-b8dd2c2c603271eb1640341aad4c6d331aa7e8c48913a150a861307ecc11e964
-74899919bc5e14e56fffc404f1388502f178dceff7ef4bf0a5cfe7abb533998c
-e5f9ea2f1dd88c180d64cb94412df3dd57e83a6b3b3c7a84c98420100c72fd3a
-636348bae726379fe69e8e8d8dbd79f3a6558b0607079796965256479b918085
-7b02db12712b6181950233023f3f647494ee6e2e5ea45864cce5b8a7fe3acffc
-3aebb22c2bd5d20e22d0757d7b7bbbbdbd3d94a313bed1b0aa3cd069838b163a
-8d4c59585f677292d0b84d9a995bd337def3fe6bbe5e6001989b9b6bfe27ea08
-36373781542ab56573248b4c5bc843ac4048c7ab21aa24ca00534c25482828a3
-8c9ee67475bbaaaab22cb722c8e57240a150301a8d219de94e44534d7d90e885
-87acb0e2c4f9800731629b6c5ee14a35a6b9887d2a0032994cb9cf15dbe59650
-ff7b46a04c9a749e7cc5112214266cc65c31354d5b5d5d3d90209bcd5616a552
-a95c2e87f2a659bd9ee01c2cd73964e438f129a6aa9e582c363838b80f81d7eb
-5555b56a2a8ad2d9d7affd0409f8015c208013fea00177b873831b0282c964f2
-783c1e8fa7582cee5f81a669b5e6eeeeaee58e8559b0c233d8843c7c0b963a82
-34e94b5cb2396d7d7d7db22c8ba258fb0afd43f0e2c58b919191ba9de9b4d425
-118329b0c3323c8709d02041b52b4ea7f39de75d2a934a2693c0a953a76a93d4
-5d157ebf7f6565a5542a553df97c5e10045dd731c130b86113cc300cbd489224
-08422a952a140a95788fc763b1d41558d7a2d7af5f5fb870a1d6a3aaaacd6603
-18802da84c59015bd2e6897b745d9765b99a1df0f97c0daf74e36deaf7fbcd66
-73ad2797cb89a2c839880188a2e8743a8bc5a22ccbba5e376466b3b9bdbdbd21
-6123413a9d0e0402b51e4dd3bababa788eb022b85caeb6b6364551b6b7b76942
-43f7f727007a7a7a04a1ee8065b3595fde2768423299ac1ec6669c3973e65004
-c0f8f878ad69341a33994ced2969c0d0d0502412f9f8f163f3a7fd654b474787
-288ad53e74757535df6215b85cae60302849d2410aecc037f9f2e5cbd5b5c160
-680eb0dbede170381c0e7ff8f0a185be3b906068684892a4ca7a6f6faff69328
-8ad3d3d3f7efdfdfdbdbfb57e96868a14d0d0643381c96242997cbe5f3794010
-84603078fcf8f1d6496bd14a3aba5c2ea7d369341a5555b5582c8140e0fcf9f3
-1b1b1b87cf4eeb0a8063c78e45a3d19e9e1ebfdfdf5a831e844655d18093274f
-9e3d7bf6d3a74f3b3b3b47c80efc05ff7af28fefb70d9b0000000049454e44ae
-426082
-"""),
-  'basn6a16': _dehex("""
-89504e470d0a1a0a0000000d494844520000002000000020100600000023eaa6
-b70000000467414d41000186a031e8965f00000d2249444154789cdd995f6c1c
-d775c67ff38fb34b724d2ee55a8e4b04a0ac87049100cab4dbd8c6528902cb4d
-10881620592e52d4325ac0905bc98a94025e71fd622cb5065ac98a0c283050c0
-728a00b6e542a1d126885cd3298928891d9a0444037e904434951d4b90b84b2f
-c9dde1fcebc33977a95555348f411e16dfce9d3b77ee77eebde77ce78c95a669
-0ad07c17009a13edd898b87dfb1fcb7d2b4d1bff217f33df80deb1e6267df0ff
-c1e6e6dfafdf1f5a7fd30f9aef66b6d546dd355bf02c40662e3307f9725a96c6
-744c3031f83782f171c148dbc3bf1774f5dad1e79d6f095a3f54d4fbec5234ef
-d9a2f8d73afe4f14f57ef4f42def7b44f19060f06b45bddf1c5534d77fd922be
-2973a15a82e648661c6e3240aa3612ead952b604bde57458894f29deaf133bac
-13d2766f5227a4a3b8cf08da7adfd6fbd6bd8a4fe9dbb43d35e3dfa3f844fbf8
-9119bf4f7144094fb56333abf8a86063ca106f94b3a3b512343765e60082097f
-1bb86ba72439a653519b09f5cee1ce61c897d37eedf5553580ae60f4af8af33a
-b14fd400b6a0f34535c0434afc0b3a9f07147527a5fa7ca218ff56c74d74dc3f
-155cfd3325fc278acf2ae1cb4a539f5f9937c457263b0bd51234c732a300cdd1
-cc1840f0aaff54db0e4874ed5a9b5d6d27d4bb36746d80de72baa877ff4b275a
-d7895ed1897ea4139b5143fcbb1a62560da1ed9662aaed895ec78a91c18795b8
-5e07ab4af8ba128e95e682e0728bf8f2e5ae815a091a53d902ac1920d8e05f06
-589de8d8d66680789f4e454fb9d9ec66cd857af796ee2d902fa73fd5bba775a2
-153580ae44705ed0d37647d15697cb8f14bfa3e3e8fdf8031d47af571503357c
-f30d25acedcbbf135c9a35c49766ba07ab255859e8ec03684e66860182dff8f7
-0304bff6ff1c20fc81b7afdd00a71475539a536e36bb5973a19e3b923b02bde5
-e4efd4003ac170eb2d13fe274157afedbd82d6fb3a9a1e85e4551d47cf7078f8
-9671fe4289ebf5f2bf08d63f37c4eb4773c55a0996efeefa0ca011671d8060ca
-2f0004c7fcc300e166ef0240f825efe3361f106d57d423d0723f7acacd66376b
-2ed47b7a7a7a205f4ef4ac4691e0aad9aa0d41cf13741c3580a506487574ddca
-61a8c403c1863ebfbcac3475168b2de28b8b3d77544bb05ce92a02aceced3c0d
-d0cc65ea371b201cf1c601c24dde1c4078cedbdeb60322f50126a019bf6edc9b
-39e566b39b3517eaf97c3e0fbde5e4491d45bd74537145d155b476aa0176e868
-c6abebf30dbd5e525c54ac8e18e2d56abeb756827a3d970358a97416019a6f64
-f60004fdfe1580d5c98e618070cc1b05887eee7e0d209a70db7d8063029889b4
-c620ead78d7b33a7dc6c76b3e6427ddddbebde867c393aa7845e5403e8ca794a
-d0d6fb897af5f03525fe5782f5e7046bdaef468bf88d1debc6ab25583cd17310
-6079b9ab0ba059c914018245bf076075b5a303200c3c1f209a733701444fbbaf
-00c4134ebb016c5d0b23614c243701cdf875e3decce9349bddacb9505fbf7dfd
-76e82d87736a00f5d2b5ffd4b7dce2719a4d25ae717ee153c1abef18e257cfad
-7fa45682da48ef38c052b53b0fd06864b300c151ff08c0ea431de701a287dd5f
-004497dc7b01a253ee3e80b8c7f91c20f967fb6fdb7c80ada7d8683723614c24
-3701cdf875e3decc29379bddacb950ef3fd47f08f2e5a61ea4aa2a3eb757cd55
-13345efcfa59c12b2f19e2578ef77fb75a82854ffbee01a83f977b11a031931d
-040802df07082b5e11207cc17b1e209a770700e2df0a83e409fb7580f827c230
-99b06fd901fb058d6835dacd481813c94d40337eddb83773cacd66376b2ed437
-bebcf165e82d2f4e4beb7f3fa6e652c2d7ee10bc78c010bfb87fe3c95a09ae9f
-bd732740bd2fb700d0f865f64180e059ff044018ca0ca28a5b04883f701e0088
-bfec7c0c909cb71f0448c6ec518074b375012079d9dedf66004bcfbc51eb2dd1
-aadacd481813c94d40337eddb83773cacd66376b2ed487868686205fbe7c49ef
-5605a73f34c4a7a787eeab96e0da81bb4e022c15ba27019a5b339300e16bf286
-a8eae601e25866907cdf3e0890acb36f00245fb57f05904e59c300e92561946e
-b2e600d209ab7d07f04d458dfb46ad1bd16ab49b913026929b8066fcba716fe6
-949bcd6ed65ca8ef7e7cf7e3d05b7e7c8f217ee6cdddbb6a25a856f37980e0c7
-fe4e80a82623c48193014846ec7180f4acf518409aca0cd28a5504e03b32c374
-de1a00608a0240faaa327a4b19fe946fb6f90054dbb5f2333d022db56eb4966a
-3723614c243701cdf8f556bea8a7dc6c76b3e66bd46584ddbbcebc0990cf4b0f
-ff4070520c282338a7e26700ec725202b01e4bcf0258963c6f1d4d8f0030cb20
-805549c520930c03584fa522b676f11600ffc03fde3e1b3489a9c9054c9aa23b
-c08856a3dd8c843191dc0434e3d78d7b33a75c36fb993761f7ae5a69f72ef97f
-e6ad336fed7e1c60e8bee96980bbdebbb60da07b7069062033d9dc0ae03d296f
-70ab511ec071640676252902d833c916007b3e1900b0a6d2028035968e025861
-ea01581369fb11488c34d18cbc95989afccca42baad65ba2d5683723614c24d7
-8066fcbab8b7e96918baaf5aaa56219f975fb50a43f7c9bde90fa73f1c1a02d8
-78f2e27e803b77ca08b90519315b6fe400fc1392097a9eccc0ad444500e70199
-a1331f0f00d8934901c07e5d526ceb87c2d07e2579badd005a2b31a5089391b7
-1253358049535a6add8856dd0146c298482e01ede27ed878b256ba7600ee3a09
-c18fc1df09fe01084ec25defc1b56db0f1a4f4bd78e0e2818d2f0334e7330300
-7df7c888b917e50dd9c1c60c80efcb0cbc63e1f700bce7c31700dccbd1060027
-8add9b0de06c8e2f00d84962b7d7030e2a61538331b98051f92631bd253f336a
-dd8856a3dd44c25c390efddfad96ae9f853b77c25201ba27c533b8bdf28b6ad0
-3d084b33d2e7fa59099e9901b8f2d29597fa0f01848f78e70082117f1ca07b76
-6910209b9519f895a008d031bbba05c09d8f06005c5b18b8fba25300cea6780e
-c03e911c6ccf06d507b48a4fa606634a114609de929f9934c5a87511ad57cfc1
-fa476aa5854fa1ef1e3910b905686e85cc24c40138198915f133d2d6dc2a7dea
-7df2ccc2a752faf2cec1d577aebeb37e3b4034eeee0008dff3be0e6b923773b4
-7904c0ef9119767cb4fa1500ef1361e08e452500f71561e84cc4ed3e20fab6a2
-c905f40cb76a3026bf3319b91ac2e46792a6dcd801ebc6aba5da08f48ecb81c8
-bd088d5f42f6417191de93908c803d0e76199292b485af41b60e8d9c3c537f0e
-8211f0c7211a077707dc18b931b2ee6d80a4d7ae024491ebc24d4a708ff70680
-7f25e807e8785f1878e322d6ddaf453f0770ff2dfa769b01423dbbad72a391b6
-5a7c3235985629423372494cab55c8f7d64a8b27a0e7202c55a13b0f8d19c80e
-4ae9ca3f015115dc3ca467c17a4c7ee95970ab10e5a54ff0ac3cd39881ee5958
-1a84f03df0be0e492fd855a8d6aa35d10b4962dbb0a604a3d3ee5e80a8eee600
-a24977f8660378bf0bbf00e01d0a8fb7f980f04b8aa6ce6aca8d5a7533c52753
-839152c4e222f4dc512dd5eb90cbc981e8ea12cf90cd8a8bf47d89159e2741d3
-7124f65b96fcd254dae258fa84a13c13043246a32129574787e49eae2b49b86d
-c3e2e78b9ff7f4002415bb08907c66df0d103b4e0c104db90500ff70700c203a
-ee1e82dba4c3e16e256c0acca6ceaae9afd1f612d7eb472157ac95962bd05594
-7dd1598466053245088e827f44628657942a825b84e4fb601f84b4025611aca3
-901e01bb024911dc0a4445f08e41f83df02b10142173149ab71baf027611ea95
-7a257704201d14cd9af4d90b00f194530088cb4e09c0df1c5c0088f7393f6833
-c0aa3ac156655de3bca9b34ab9716906ba07aba5e5bba1eb3358d90b9da7c533
-64f6888bf47b60f521e8380fe10be03d2feac17900927560df40f4e48f805960
-50328d648bf4893f9067c217a0631656b7c898c122847bc07b03a2d3e0ee85e4
-33b0ef867450c4fad2ecd26cf7168074c0ba0c904cdac300c9cfec4701924df6
-1cdca61e10685c6f7d52d0caba1498972f43d740adb4b2009d7d7220b20e3473
-90a943d00ffe959bb6eac3e0fe42ea49ee00c45f06e76329b1dabf127d690d80
-5581b408f63c2403e0cc433c00ee658836803b0fd100747c04ab5f917704fd10
-d5c1cd41ec801343d207f602a403605d86e5f9e5f9ae0d00e994556833806685
-c931fb709b0f08b4e869bea5c827859549e82c544b8d29c816a0390999613920
-7e610d5727a16318c2003c1fa24be0de2b32caf92224e7c17e5004b6350c4c01
-05601218066b0ad28224e149019c086257ca315102de2712903bde97b8144d82
-3b2c6ac52d403c054e019249b087f53d0558995a99ea946c70cc927458b3c1ff
-550f30050df988d4284376b4566a8e416654cc921985e037e0df0fc131f00f4b
-acf0c6211c036f14a239703741740adc7da227edd7e56b833d0ae92549b4d357
-25dfb49ed2ff63908e6adf27d6d0dda7638d4154d2778daca17f58e61297c129
-41f233b01f5dc3740cac51688c35c6b22580f48224fee9b83502569a66b629f1
-09f3713473413e2666e7fe6f6c6efefdfafda1f56f6e06f93496d9d67cb7366a
-9964b6f92e64b689196ec6c604646fd3fe4771ff1bf03f65d8ecc3addbb5f300
-00000049454e44ae426082
-"""),
-}
-
-def test_suite(options, args):
-    """
-    Create a PNG test image and write the file to stdout.
-    """
-
-    # Below is a big stack of test image generators.
-    # They're all really tiny, so PEP 8 rules are suspended.
-
-    def test_gradient_horizontal_lr(x, y): return x
-    def test_gradient_horizontal_rl(x, y): return 1-x
-    def test_gradient_vertical_tb(x, y): return y
-    def test_gradient_vertical_bt(x, y): return 1-y
-    def test_radial_tl(x, y): return max(1-math.sqrt(x*x+y*y), 0.0)
-    def test_radial_center(x, y): return test_radial_tl(x-0.5, y-0.5)
-    def test_radial_tr(x, y): return test_radial_tl(1-x, y)
-    def test_radial_bl(x, y): return test_radial_tl(x, 1-y)
-    def test_radial_br(x, y): return test_radial_tl(1-x, 1-y)
-    def test_stripe(x, n): return float(int(x*n) & 1)
-    def test_stripe_h_2(x, y): return test_stripe(x, 2)
-    def test_stripe_h_4(x, y): return test_stripe(x, 4)
-    def test_stripe_h_10(x, y): return test_stripe(x, 10)
-    def test_stripe_v_2(x, y): return test_stripe(y, 2)
-    def test_stripe_v_4(x, y): return test_stripe(y, 4)
-    def test_stripe_v_10(x, y): return test_stripe(y, 10)
-    def test_stripe_lr_10(x, y): return test_stripe(x+y, 10)
-    def test_stripe_rl_10(x, y): return test_stripe(1+x-y, 10)
-    def test_checker(x, y, n): return float((int(x*n) & 1) ^ (int(y*n) & 1))
-    def test_checker_8(x, y): return test_checker(x, y, 8)
-    def test_checker_15(x, y): return test_checker(x, y, 15)
-    def test_zero(x, y): return 0
-    def test_one(x, y): return 1
-
-    test_patterns = {
-        'GLR': test_gradient_horizontal_lr,
-        'GRL': test_gradient_horizontal_rl,
-        'GTB': test_gradient_vertical_tb,
-        'GBT': test_gradient_vertical_bt,
-        'RTL': test_radial_tl,
-        'RTR': test_radial_tr,
-        'RBL': test_radial_bl,
-        'RBR': test_radial_br,
-        'RCTR': test_radial_center,
-        'HS2': test_stripe_h_2,
-        'HS4': test_stripe_h_4,
-        'HS10': test_stripe_h_10,
-        'VS2': test_stripe_v_2,
-        'VS4': test_stripe_v_4,
-        'VS10': test_stripe_v_10,
-        'LRS': test_stripe_lr_10,
-        'RLS': test_stripe_rl_10,
-        'CK8': test_checker_8,
-        'CK15': test_checker_15,
-        'ZERO': test_zero,
-        'ONE': test_one,
-        }
-
-    def test_pattern(width, height, bitdepth, pattern):
-        """Create a single plane (monochrome) test pattern.  Returns a
-        flat row flat pixel array.
-        """
-
-        maxval = 2**bitdepth-1
-        if maxval > 255:
-            a = array('H')
-        else:
-            a = array('B')
-        fw = float(width)
-        fh = float(height)
-        pfun = test_patterns[pattern]
-        for y in range(height):
-            fy = float(y)/fh
-            for x in range(width):
-                a.append(int(round(pfun(float(x)/fw, fy) * maxval)))
-        return a
-
-    def test_rgba(size=256, bitdepth=8,
-                    red="GTB", green="GLR", blue="RTL", alpha=None):
-        """
-        Create a test image.  Each channel is generated from the
-        specified pattern; any channel apart from red can be set to
-        None, which will cause it not to be in the image.  It
-        is possible to create all PNG channel types (L, RGB, LA, RGBA),
-        as well as non PNG channel types (RGA, and so on).
-        """
-
-        i = test_pattern(size, size, bitdepth, red)
-        psize = 1
-        for channel in (green, blue, alpha):
-            if channel:
-                c = test_pattern(size, size, bitdepth, channel)
-                i = interleave_planes(i, c, psize, 1)
-                psize += 1
-        return i
-
-    def pngsuite_image(name):
-        """
-        Create a test image by reading an internal copy of the files
-        from the PngSuite.  Returned in flat row flat pixel format.
-        """
-
-        if name not in _pngsuite:
-            raise NotImplementedError("cannot find PngSuite file %s (use -L for a list)" % name)
-        r = Reader(bytes=_pngsuite[name])
-        w,h,pixels,meta = r.asDirect()
-        assert w == h
-        # LAn for n < 8 is a special case for which we need to rescale
-        # the data.
-        if meta['greyscale'] and meta['alpha'] and meta['bitdepth'] < 8:
-            factor = 255 // (2**meta['bitdepth']-1)
-            def rescale(data):
-                for row in data:
-                    yield map(factor.__mul__, row)
-            pixels = rescale(pixels)
-            meta['bitdepth'] = 8
-        arraycode = 'BH'[meta['bitdepth']>8]
-        return w, array(arraycode, itertools.chain(*pixels)), meta
-
-    # The body of test_suite()
-    size = 256
-    if options.test_size:
-        size = options.test_size
-    options.bitdepth = options.test_depth
-    options.greyscale=bool(options.test_black)
-
-    kwargs = {}
-    if options.test_red:
-        kwargs["red"] = options.test_red
-    if options.test_green:
-        kwargs["green"] = options.test_green
-    if options.test_blue:
-        kwargs["blue"] = options.test_blue
-    if options.test_alpha:
-        kwargs["alpha"] = options.test_alpha
-    if options.greyscale:
-        if options.test_red or options.test_green or options.test_blue:
-            raise ValueError("cannot specify colours (R, G, B) when greyscale image (black channel, K) is specified")
-        kwargs["red"] = options.test_black
-        kwargs["green"] = None
-        kwargs["blue"] = None
-    options.alpha = bool(options.test_alpha)
-    if not args:
-        pixels = test_rgba(size, options.bitdepth, **kwargs)
-    else:
-        size,pixels,meta = pngsuite_image(args[0])
-        for k in ['bitdepth', 'alpha', 'greyscale']:
-            setattr(options, k, meta[k])
-
-    writer = Writer(size, size,
-                    bitdepth=options.bitdepth,
-                    transparent=options.transparent,
-                    background=options.background,
-                    gamma=options.gamma,
-                    greyscale=options.greyscale,
-                    alpha=options.alpha,
-                    compression=options.compression,
-                    interlace=options.interlace)
-    writer.write_array(sys.stdout, pixels)
-
-def read_pam_header(infile):
-    """
-    Read (the rest of a) PAM header.  `infile` should be positioned
-    immediately after the initial 'P7' line (at the beginning of the
-    second line).  Returns are as for `read_pnm_header`.
-    """
-    
-    # Unlike PBM, PGM, and PPM, we can read the header a line at a time.
-    header = dict()
-    while True:
-        l = infile.readline().strip()
-        if l == strtobytes('ENDHDR'):
-            break
-        if not l:
-            raise EOFError('PAM ended prematurely')
-        if l[0] == strtobytes('#'):
-            continue
-        l = l.split(None, 1)
-        if l[0] not in header:
-            header[l[0]] = l[1]
-        else:
-            header[l[0]] += strtobytes(' ') + l[1]
-
-    required = ['WIDTH', 'HEIGHT', 'DEPTH', 'MAXVAL']
-    required = [strtobytes(x) for x in required]
-    WIDTH,HEIGHT,DEPTH,MAXVAL = required
-    present = [x for x in required if x in header]
-    if len(present) != len(required):
-        raise Error('PAM file must specify WIDTH, HEIGHT, DEPTH, and MAXVAL')
-    width = int(header[WIDTH])
-    height = int(header[HEIGHT])
-    depth = int(header[DEPTH])
-    maxval = int(header[MAXVAL])
-    if (width <= 0 or
-        height <= 0 or
-        depth <= 0 or
-        maxval <= 0):
-        raise Error(
-          'WIDTH, HEIGHT, DEPTH, MAXVAL must all be positive integers')
-    return 'P7', width, height, depth, maxval
-
-def read_pnm_header(infile, supported=('P5','P6')):
-    """
-    Read a PNM header, returning (format,width,height,depth,maxval).
-    `width` and `height` are in pixels.  `depth` is the number of
-    channels in the image; for PBM and PGM it is synthesized as 1, for
-    PPM as 3; for PAM images it is read from the header.  `maxval` is
-    synthesized (as 1) for PBM images.
-    """
-
-    # Generally, see http://netpbm.sourceforge.net/doc/ppm.html
-    # and http://netpbm.sourceforge.net/doc/pam.html
-
-    supported = [strtobytes(x) for x in supported]
-
-    # Technically 'P7' must be followed by a newline, so by using
-    # rstrip() we are being liberal in what we accept.  I think this
-    # is acceptable.
-    type = infile.read(3).rstrip()
-    if type not in supported:
-        raise NotImplementedError('file format %s not supported' % type)
-    if type == strtobytes('P7'):
-        # PAM header parsing is completely different.
-        return read_pam_header(infile)
-    # Expected number of tokens in header (3 for P4, 4 for P6)
-    expected = 4
-    pbm = ('P1', 'P4')
-    if type in pbm:
-        expected = 3
-    header = [type]
-
-    # We have to read the rest of the header byte by byte because the
-    # final whitespace character (immediately following the MAXVAL in
-    # the case of P6) may not be a newline.  Of course all PNM files in
-    # the wild use a newline at this point, so it's tempting to use
-    # readline; but it would be wrong.
-    def getc():
-        c = infile.read(1)
-        if not c:
-            raise Error('premature EOF reading PNM header')
-        return c
-
-    c = getc()
-    while True:
-        # Skip whitespace that precedes a token.
-        while c.isspace():
-            c = getc()
-        # Skip comments.
-        while c == '#':
-            while c not in '\n\r':
-                c = getc()
-        if not c.isdigit():
-            raise Error('unexpected character %s found in header' % c)
-        # According to the specification it is legal to have comments
-        # that appear in the middle of a token.
-        # This is bonkers; I've never seen it; and it's a bit awkward to
-        # code good lexers in Python (no goto).  So we break on such
-        # cases.
-        token = strtobytes('')
-        while c.isdigit():
-            token += c
-            c = getc()
-        # Slight hack.  All "tokens" are decimal integers, so convert
-        # them here.
-        header.append(int(token))
-        if len(header) == expected:
-            break
-    # Skip comments (again)
-    while c == '#':
-        while c not in '\n\r':
-            c = getc()
-    if not c.isspace():
-        raise Error('expected header to end with whitespace, not %s' % c)
-
-    if type in pbm:
-        # synthesize a MAXVAL
-        header.append(1)
-    depth = (1,3)[type == strtobytes('P6')]
-    return header[0], header[1], header[2], depth, header[3]
-
-def write_pnm(file, width, height, pixels, meta):
-    """Write a Netpbm PNM/PAM file."""
-
-    bitdepth = meta['bitdepth']
-    maxval = 2**bitdepth - 1
-    # Rudely, the number of image planes can be used to determine
-    # whether we are L (PGM), LA (PAM), RGB (PPM), or RGBA (PAM).
-    planes = meta['planes']
-    # Can be an assert as long as we assume that pixels and meta came
-    # from a PNG file.
-    assert planes in (1,2,3,4)
-    if planes in (1,3):
-        if 1 == planes:
-            # PGM
-            # Could generate PBM if maxval is 1, but we don't (for one
-            # thing, we'd have to convert the data, not just blat it
-            # out).
-            fmt = 'P5'
-        else:
-            # PPM
-            fmt = 'P6'
-        file.write('%s %d %d %d\n' % (fmt, width, height, maxval))
-    if planes in (2,4):
-        # PAM
-        # See http://netpbm.sourceforge.net/doc/pam.html
-        if 2 == planes:
-            tupltype = 'GRAYSCALE_ALPHA'
-        else:
-            tupltype = 'RGB_ALPHA'
-        file.write('P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\n'
-                   'TUPLTYPE %s\nENDHDR\n' %
-                   (width, height, planes, maxval, tupltype))
-    # Values per row
-    vpr = planes * width
-    # struct format
-    fmt = '>%d' % vpr
-    if maxval > 0xff:
-        fmt = fmt + 'H'
-    else:
-        fmt = fmt + 'B'
-    for row in pixels:
-        file.write(struct.pack(fmt, *row))
-    file.flush()
-
-def color_triple(color):
-    """
-    Convert a command line colour value to a RGB triple of integers.
-    FIXME: Somewhere we need support for greyscale backgrounds etc.
-    """
-    if color.startswith('#') and len(color) == 4:
-        return (int(color[1], 16),
-                int(color[2], 16),
-                int(color[3], 16))
-    if color.startswith('#') and len(color) == 7:
-        return (int(color[1:3], 16),
-                int(color[3:5], 16),
-                int(color[5:7], 16))
-    elif color.startswith('#') and len(color) == 13:
-        return (int(color[1:5], 16),
-                int(color[5:9], 16),
-                int(color[9:13], 16))
-
-
-def _main(argv):
-    """
-    Run the PNG encoder with options from the command line.
-    """
-
-    # Parse command line arguments
-    from optparse import OptionParser
-    import re
-    version = '%prog ' + re.sub(r'( ?\$|URL: |Rev:)', '', __version__)
-    parser = OptionParser(version=version)
-    parser.set_usage("%prog [options] [imagefile]")
-    parser.add_option('-r', '--read-png', default=False,
-                      action='store_true',
-                      help='Read PNG, write PNM')
-    parser.add_option("-i", "--interlace",
-                      default=False, action="store_true",
-                      help="create an interlaced PNG file (Adam7)")
-    parser.add_option("-t", "--transparent",
-                      action="store", type="string", metavar="color",
-                      help="mark the specified colour (#RRGGBB) as transparent")
-    parser.add_option("-b", "--background",
-                      action="store", type="string", metavar="color",
-                      help="save the specified background colour")
-    parser.add_option("-a", "--alpha",
-                      action="store", type="string", metavar="pgmfile",
-                      help="alpha channel transparency (RGBA)")
-    parser.add_option("-g", "--gamma",
-                      action="store", type="float", metavar="value",
-                      help="save the specified gamma value")
-    parser.add_option("-c", "--compression",
-                      action="store", type="int", metavar="level",
-                      help="zlib compression level (0-9)")
-    parser.add_option("-T", "--test",
-                      default=False, action="store_true",
-                      help="create a test image (a named PngSuite image if an argument is supplied)")
-    parser.add_option('-L', '--list',
-                      default=False, action='store_true',
-                      help="print list of named test images")
-    parser.add_option("-R", "--test-red",
-                      action="store", type="string", metavar="pattern",
-                      help="test pattern for the red image layer")
-    parser.add_option("-G", "--test-green",
-                      action="store", type="string", metavar="pattern",
-                      help="test pattern for the green image layer")
-    parser.add_option("-B", "--test-blue",
-                      action="store", type="string", metavar="pattern",
-                      help="test pattern for the blue image layer")
-    parser.add_option("-A", "--test-alpha",
-                      action="store", type="string", metavar="pattern",
-                      help="test pattern for the alpha image layer")
-    parser.add_option("-K", "--test-black",
-                      action="store", type="string", metavar="pattern",
-                      help="test pattern for greyscale image")
-    parser.add_option("-d", "--test-depth",
-                      default=8, action="store", type="int",
-                      metavar='NBITS',
-                      help="create test PNGs that are NBITS bits per channel")
-    parser.add_option("-S", "--test-size",
-                      action="store", type="int", metavar="size",
-                      help="width and height of the test image")
-    (options, args) = parser.parse_args(args=argv[1:])
-
-    # Convert options
-    if options.transparent is not None:
-        options.transparent = color_triple(options.transparent)
-    if options.background is not None:
-        options.background = color_triple(options.background)
-
-    if options.list:
-        names = list(_pngsuite)
-        names.sort()
-        for name in names:
-            print name
-        return
-
-    # Run regression tests
-    if options.test:
-        return test_suite(options, args)
-
-    # Prepare input and output files
-    if len(args) == 0:
-        infilename = '-'
-        infile = sys.stdin
-    elif len(args) == 1:
-        infilename = args[0]
-        infile = open(infilename, 'rb')
-    else:
-        parser.error("more than one input file")
-    outfile = sys.stdout
-
-    if options.read_png:
-        # Encode PNG to PPM
-        png = Reader(file=infile)
-        width,height,pixels,meta = png.asDirect()
-        write_pnm(outfile, width, height, pixels, meta) 
-    else:
-        # Encode PNM to PNG
-        format, width, height, depth, maxval = \
-          read_pnm_header(infile, ('P5','P6','P7'))
-        # When it comes to the variety of input formats, we do something
-        # rather rude.  Observe that L, LA, RGB, RGBA are the 4 colour
-        # types supported by PNG and that they correspond to 1, 2, 3, 4
-        # channels respectively.  So we use the number of channels in
-        # the source image to determine which one we have.  We do not
-        # care about TUPLTYPE.
-        greyscale = depth <= 2
-        pamalpha = depth in (2,4)
-        supported = map(lambda x: 2**x-1, range(1,17))
-        try:
-            mi = supported.index(maxval)
-        except ValueError:
-            raise NotImplementedError(
-              'your maxval (%s) not in supported list %s' %
-              (maxval, str(supported)))
-        bitdepth = mi+1
-        writer = Writer(width, height,
-                        greyscale=greyscale,
-                        bitdepth=bitdepth,
-                        interlace=options.interlace,
-                        transparent=options.transparent,
-                        background=options.background,
-                        alpha=bool(pamalpha or options.alpha),
-                        gamma=options.gamma,
-                        compression=options.compression)
-        if options.alpha:
-            pgmfile = open(options.alpha, 'rb')
-            format, awidth, aheight, adepth, amaxval = \
-              read_pnm_header(pgmfile, 'P5')
-            if amaxval != '255':
-                raise NotImplementedError(
-                  'maxval %s not supported for alpha channel' % amaxval)
-            if (awidth, aheight) != (width, height):
-                raise ValueError("alpha channel image size mismatch"
-                                 " (%s has %sx%s but %s has %sx%s)"
-                                 % (infilename, width, height,
-                                    options.alpha, awidth, aheight))
-            writer.convert_ppm_and_pgm(infile, pgmfile, outfile)
-        else:
-            writer.convert_pnm(infile, outfile)
-
-
-if __name__ == '__main__':
-    try:
-        _main(sys.argv)
-    except Error, e:
-        print >>sys.stderr, e
deleted file mode 100644
--- a/im/app/png2ico.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-import png
-import sys
-import StringIO
-import struct
-import ctypes
-
-# ref: http://msdn.microsoft.com/en-us/library/ms997538
-class ICONDIR(ctypes.LittleEndianStructure):
-    _pack_ = 1
-    _fields_ = [("idReserved", ctypes.c_ushort),
-                ("idType", ctypes.c_ushort),
-                ("idCount", ctypes.c_ushort)]
-
-class ICONDIRENTRY(ctypes.LittleEndianStructure):
-    _pack_ = 1
-    _fields_ = [("bWidth", ctypes.c_byte),
-                ("bHeight", ctypes.c_byte),
-                ("bColorCount", ctypes.c_byte),
-                ("bReserved", ctypes.c_byte),
-                ("wPlanes", ctypes.c_ushort),
-                ("wBitCount", ctypes.c_ushort),
-                ("dwBytesInRes", ctypes.c_ulong),
-                ("dwImageOffset", ctypes.c_ulong)]
-
-# R, G, B, A, so 4 columns per pixel
-COLS_PP = 4
-
-def main(infile, left, top, size, outfile):
-    img = png.Reader(filename=infile)
-    pixels = list(img.asRGBA()[2])
-    # Take the subarray out. This is the ugliest but probably most efficient way
-    # to do it
-    outpixels = [[0] * (size * COLS_PP) for x in xrange(size)]
-    for row in xrange(size):
-        for col in xrange(size * COLS_PP):
-            outpixels[row][col] = pixels[top + row][left * COLS_PP + col]
-
-    # Set up a 32bpp RGBA PNG.
-    writer = png.Writer(size=(size, size), bitdepth=8, alpha=True)
-    # Write to a memory buffer
-    outpng = StringIO.StringIO()
-    writer.write(outpng, outpixels)
-    outpngbuf = outpng.getvalue()
-    outpng.close()
-
-    # Set up an icon header
-    icondir = ICONDIR()
-    icondir.idReserved = 0
-    # Icons are type 1
-    icondir.idType = 1
-    icondir.idCount = 1
-
-    iconentry = ICONDIRENTRY()
-    iconentry.bWidth = size
-    iconentry.bHeight = size
-    # Truecolor images have color count set to 0
-    iconentry.bColorCount = 0
-    iconentry.bReserved = 0
-    # PNGs have 1 color plane
-    iconentry.wPlanes = 1
-    # We're RGBA, so 32 bits per pixel
-    iconentry.wBitCount = 32
-    # Length of the buffer
-    iconentry.dwBytesInRes = len(outpngbuf)
-    # The data will be right after the icondir and iconentry
-    iconentry.dwImageOffset = ctypes.sizeof(icondir) + ctypes.sizeof(iconentry)
-
-    # Time to write everything out
-    out = open(outfile, "wb")
-    out.write(icondir)
-    out.write(iconentry)
-    out.write(outpngbuf)
-    out.close()
-
-if __name__ == "__main__":
-    # Convert left, top and size into integers
-    main(*([sys.argv[1]] + [int(val) for val in sys.argv[2:5]] + [sys.argv[5]]))
deleted file mode 100644
--- a/im/app/profile/all-instantbird.js
+++ /dev/null
@@ -1,344 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-pref("toolkit.defaultChromeURI", "chrome://instantbird/content/blist.xul");
-pref("toolkit.singletonWindowType", "Messenger:blist");
-#ifdef XP_MACOSX
-pref("browser.hiddenWindowChromeURL", "chrome://instantbird/content/hiddenWindow.xul");
-#endif
-
-#expand pref("general.useragent.extra.instantbird", "Instantbird/__APP_VERSION__");
-
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-#define UNIX_BUT_NOT_MAC
-#endif
-#endif
-
-pref("general.smoothScroll", false);
-#ifdef UNIX_BUT_NOT_MAC
-pref("general.autoScroll", false);
-#else
-pref("general.autoScroll", true);
-#endif
-
-// this will automatically enable inline spellchecking (if it is available) for
-// editable elements in HTML
-// 0 = spellcheck nothing
-// 1 = check multi-line controls [default]
-// 2 = check multi/single line controls
-pref("layout.spellcheckDefault", 1);
-
-pref("messenger.accounts.convertOldPasswords", true);
-pref("messenger.accounts.promptOnDelete", true);
-
-pref("messenger.buddies.showOffline", false);
-pref("messenger.buddies.hideTagPrompt", true);
-
-pref("messenger.conversations.openInTabs", true);
-pref("messenger.conversations.useSeparateWindowsForMUCs", false);
-pref("messenger.conversations.doubleClickToReply", true);
-
-pref("messenger.conversations.showNicks", true);
-// Timespan (in seconds) that a MUC nick is marked active after speaking.
-// -1 = keep active forever
-pref("messenger.conversations.nickActiveTimespan", 3600);
-
-pref("messenger.options.getAttentionOnNewMessages", true);
-pref("messenger.options.notifyOfNewMessages", false);
-#ifdef XP_MACOSX
-pref("messenger.options.showUnreadCountInDock", true);
-#else
-// For *nix and Windows set the minimize to tray options.
-// Default to minimize on close
-pref("extensions.mintrayr.minimizeon", 2);
-pref("extensions.mintrayr.alwaysShowTrayIcon", true);
-pref("extensions.mintrayr.startMinimized", false);
-#ifdef XP_UNIX
-// For Linux, use single click.
-pref("extensions.mintrayr.singleClickRestore", true);
-#else
-// For Windows, use double click.
-pref("extensions.mintrayr.singleClickRestore", false);
-#endif
-#endif
-
-// Whether message related sounds should be played at all. If this is enabled
-// then the more specific prefs are checked as well.
-pref("messenger.options.playSounds.message", true);
-// Specifies whether each message event should trigger a sound for incoming
-// and outgoing messages, or when your nickname is mentioned in a chat.
-pref("messenger.options.playSounds.outgoing", true);
-pref("messenger.options.playSounds.incoming", true);
-pref("messenger.options.playSounds.alert", true);
-// Whether contact list related sounds should be played at all. If this is
-// enabled then the more specific prefs are checked as well.
-pref("messenger.options.playSounds.blist", false);
-// Specifies whether sounds should be played on login/logout events.
-pref("messenger.options.playSounds.login", true);
-pref("messenger.options.playSounds.logout", true);
-
-pref("font.default.x-western", "sans-serif");
-pref("font.default.x-unicode", "sans-serif");
-pref("font.default.x-cyrillic", "sans-serif");
-#ifdef XP_MACOSX
-pref("font.name.sans-serif.x-unicode", "Lucida Grande");
-pref("font.name.sans-serif.x-western", "Lucida Grande");
-pref("font.name.sans-serif.x-cyrillic", "Lucida Grande");
-#endif
-pref("font.size.variable.x-western", 13);
-pref("font.size.variable.x-unicode", 13);
-pref("font.size.variable.x-cyrillic", 13);
-
-pref("messenger.proxies", "");
-pref("messenger.globalProxy", "none");
-pref("messenger.warnOnQuit", true);
-
-#ifdef XP_WIN
-pref("browser.preferences.instantApply", false);
-#else
-pref("browser.preferences.instantApply", true);
-#endif
-#ifdef XP_MACOSX
-pref("browser.preferences.animateFadeIn", true);
-#else
-pref("browser.preferences.animateFadeIn", false);
-#endif
-
-pref("browser.zoom.full", true);
-pref("conversation.zoomLevel", "1.0");
-
-pref("accessibility.typeaheadfind", false);
-pref("accessibility.typeaheadfind.timeout", 5000);
-pref("accessibility.typeaheadfind.linksonly", false);
-pref("accessibility.typeaheadfind.flashBar", 1);
-
-// Whether or not app updates are enabled
-pref("app.update.enabled", true);
-
-// This preference turns on app.update.mode and allows automatic download and
-// install to take place. We use a separate boolean toggle for this to make
-// the UI easier to construct.
-pref("app.update.auto", true);
-
-// Defines how the Application Update Service notifies the user about updates:
-//
-// AUM Set to:        Minor Releases:     Major Releases:
-// 0                  download no prompt  download no prompt
-// 1                  download no prompt  download no prompt if no incompatibilities
-// 2                  download no prompt  prompt
-//
-// See chart in nsUpdateService.js.in for more details
-//
-pref("app.update.mode", 1);
-
-// If set to true, the Update Service will present no UI for any event.
-pref("app.update.silent", false);
-
-// If set to true, the Update Service will apply updates in the background
-// when it finishes downloading them.
-pref("app.update.staging.enabled", true);
-
-// Update service URL:
-// You do not need to use all the %VAR% parameters. Use what you need, %PRODUCT%,%VERSION%,%BUILD_ID%,%CHANNEL% for example
-pref("app.update.url", "https://update.instantbird.org/1/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/update.xml");
-
-// URL user can browse to manually if for some reason all update installation
-// attempts fail.
-pref("app.update.url.manual", "http://www.instantbird.com/download.html");
-
-// A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard.
-pref("app.update.url.details", "http://www.instantbird.com/");
-
-// User-settable override to app.update.url for testing purposes.
-//pref("app.update.url.override", "");
-
-// Interval: Time between checks for a new version (in seconds)
-//           default=1 day
-pref("app.update.interval", 86400);
-
-// Interval: Time before prompting the user to download a new version that
-//           is available (in seconds) default=1 day
-pref("app.update.nagTimer.download", 86400);
-
-// Interval: Time before prompting the user to restart to install the latest
-//           download (in seconds) default=30 minutes
-pref("app.update.nagTimer.restart", 1800);
-
-// 0 = suppress prompting for incompatibilities if there are updates available
-//     to newer versions of installed addons that resolve them.
-// 1 = suppress prompting for incompatibilities only if there are VersionInfo
-//     updates available to installed addons that resolve them, not newer
-//     versions.
-pref("app.update.incompatible.mode", 0);
-
-// The time interval between the downloading of mar file chunks in the
-// background (in seconds)
-pref("app.update.download.backgroundInterval", 60);
-
-// base URL for web-based support pages (used by toolkit)
-pref("app.support.baseURL", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/");
-
-// Dictionary download preference
-pref("browser.dictionaries.download.url", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/dictionaries/");
-
-// search engines URL
-pref("browser.search.searchEnginesURL",      "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/search-engines/");
-
-// pointer to the default engine name. Keep this empty so that the
-// first engine listed in the engine manager is used instead
-pref("browser.search.defaultenginename",      "");
-
-// disable logging for the search service by default
-pref("browser.search.log", false);
-
-// Ordering of Search Engines in the Engine list.
-pref("browser.search.order.1",                "chrome://instantbird/locale/region.properties");
-pref("browser.search.order.2",                "chrome://instantbird/locale/region.properties");
-
-// send ping to the server to update
-pref("browser.search.update", true);
-
-// disable logging for the search service update system by default
-pref("browser.search.update.log", false);
-
-// Check whether we need to perform engine updates every 6 hours
-pref("browser.search.updateinterval", 6);
-
-// Developer Tools related preferences
-pref("devtools.debugger.log", false);
-pref("devtools.chrome.enabled", true);
-pref("devtools.selfxss.count", 5);
-
-// Blocklist preferences
-pref("extensions.blocklist.enabled", true);
-// Controls what level the blocklist switches from warning about items to forcibly
-// blocking them.
-pref("extensions.blocklist.level", 2);
-
-// Kinto blocklist preferences
-pref("services.kinto.update_enabled", false);
-
-// Block insecure active content on https pages
-pref("security.mixed_content.block_active_content", true);
-
-// 1 = allow "Man In The Middle" (local proxy, web filter, etc.) for certificate
-//     pinning checks.
-pref("security.cert_pinning.enforcement_level", 1);
-
-/* Extension manager */
-pref("xpinstall.dialog.confirm", "chrome://mozapps/content/xpinstall/xpinstallConfirm.xul");
-pref("xpinstall.dialog.progress.skin", "chrome://mozapps/content/extensions/extensions.xul");
-pref("xpinstall.dialog.progress.chrome", "chrome://mozapps/content/extensions/extensions.xul");
-pref("xpinstall.dialog.progress.type.skin", "Extension:Manager");
-pref("xpinstall.dialog.progress.type.chrome", "Extension:Manager");
-pref("extensions.dss.switchPending", false);
-pref("extensions.ignoreMTimeChanges", false);
-pref("extensions.logging.enabled", false);
-pref("general.skins.selectedSkin", "classic/1.0");
-
-pref("extensions.update.enabled", true);
-pref("extensions.update.interval", 86400);
-pref("extensions.update.url", "https://addons.instantbird.org/services/update.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%");
-pref("extensions.update.autoUpdateDefault", true);
-
-// Preferences for the Get Add-ons pane
-pref("extensions.getAddons.cache.enabled", false);
-pref("extensions.getAddons.browseAddons", "https://addons.instantbird.org/%LOCALE%/%APP%");
-pref("extensions.getAddons.maxResults", 5);
-pref("extensions.getAddons.recommended.browseURL", "https://addons.instantbird.org/%LOCALE%/%APP%/recommended");
-pref("extensions.getAddons.recommended.url", "https://services.instantbird.org/%LOCALE%/%APP%/api/%API_VERSION%/list/featured/all/10/%OS%/%VERSION%");
-pref("extensions.getAddons.search.browseURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/search?q=%TERMS%");
-pref("extensions.getAddons.search.url", "https://services.instantbird.org/%LOCALE%/%APP%/api/%API_VERSION%/search/%TERMS%/all/10/%OS%/%VERSION%");
-pref("extensions.webservice.discoverURL", "chrome://instantbird/content/extensions-discover.xul");
-
-pref("extensions.getMoreExtensionsURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/extensions/");
-pref("extensions.getMoreThemesURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/themes/");
-pref("extensions.getMorePluginsURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/plugins/");
-pref("extensions.getMoreMessageStylesURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/messagestyles/");
-pref("extensions.getMoreEmoticonsURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/emoticons/");
-pref("extensions.getMoreProtocolsURL", "https://add-ons.instantbird.org/%LOCALE%/%APP%/%VERSION%/protocols/");
-
-// Click-to-play has not been ported yet, see bug 814168.
-// The default plugin state should be changed to "ask to activate" when this
-// has been done.
-pref("plugins.click_to_play", false);
-// Disable by default.
-pref("plugin.default.state", 0);
-
-// Plugins bundled in XPIs are disabled by default.
-pref("plugin.defaultXpi.state", 0);
-
-// Flash and Java disabled by default.
-pref("plugin.state.flash", 0);
-pref("plugin.state.java", 0);
-
-// suppress external-load warning for standard browser schemes
-pref("network.protocol-handler.warn-external.http", false);
-pref("network.protocol-handler.warn-external.https", false);
-pref("network.protocol-handler.warn-external.ftp", false);
-
-// don't load links inside Instantbird
-pref("network.protocol-handler.expose-all", false);
-// Although we allow these to be exposed internally, there are various places
-// (e.g. message pane) where we may divert them out to external applications.
-pref("network.protocol-handler.expose.about", true);
-pref("network.protocol-handler.expose.http", true);
-pref("network.protocol-handler.expose.https", true);
-
-// expose javascript: so that message themes can use it.
-// javascript: links inside messages are filtered out.
-pref("network.protocol-handler.expose.javascript", true);
-
-// 0-Accept, 1-dontAcceptForeign, 2-dontUse
-pref("network.cookie.cookieBehavior", 0);
-
-// The breakpad report server to link to in about:crashes
-pref("breakpad.reportURL", "http://crash-stats.instantbird.com/report/index/");
-
-// We have an Error Console menu item by default so let's display chrome errors
-pref("javascript.options.showInConsole", true);
-#ifdef DEBUG
-// In debug builds, also display warnings by default
-pref("javascript.options.strict", true);
-
-// Having to click through the "I'll be careful" button all the time
-// is annoying, and users of debug builds are expected to know what
-// they are doing...
-pref("general.warnOnAboutConfig", false);
-
-// In debug builds, disable the XUL cache by default
-pref("nglayout.debug.disable_xul_cache", true);
-pref("nglayout.debug.disable_xul_fastload", true);
-#else
-// So that we can enable dump easily from about:config...
-pref("browser.dom.window.dump.enabled", false);
-#endif
-
-// Tabbed browser
-pref("browser.tabs.autoHide", false);
-pref("browser.tabs.warnOnClose", true);
-pref("browser.tabs.tabMinWidth", 100);
-pref("browser.tabs.tabMaxWidth", 250);
-pref("browser.tabs.tabClipWidth", 140);
-
-// Where to show tab close buttons:
-// 0  on active tab only
-// 1  on all tabs until tabClipWidth is reached, then active tab only
-// 2  no close buttons at all
-// 3  at the end of the tabstrip
-pref("browser.tabs.closeButtons", 1);
-
-#expand pref("chat.irc.defaultQuitMessage", "Instantbird __APP_VERSION__ -- http://www.instantbird.com");
-
-pref("chat.twitter.consumerKey", "TSuyS1ieRAkB3qWv8yyEw");
-pref("chat.twitter.consumerSecret", "DKtKaSf5a7pBNhdBsSZHTnI5Y03hRlPFYWmb4xXBlkU");
-
-// Comma separated list of prpl ids that should use libpurple even if there is
-// a JS implementation. This is used to land JS-prpls pref'ed off in nightlies.
-pref("chat.prpls.forcePurple", "");
-
-// Whether to parse log files for conversation statistics.
-pref("statsService.parseLogsForStats", true);
deleted file mode 100644
--- a/im/app/profile/channel-prefs.js
+++ /dev/null
@@ -1,6 +0,0 @@
-#filter substitution
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-pref("app.update.channel", "@MOZ_UPDATE_CHANNEL@");
deleted file mode 100644
--- a/im/app/profile/extensions/installed-extensions.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-theme,{972ce4c6-7e08-4474-a285-3208198ce6fd}
deleted file mode 100644
--- a/im/app/profile/extensions/moz.build
+++ /dev/null
@@ -1,6 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += ['{972ce4c6-7e08-4474-a285-3208198ce6fd}']
deleted file mode 100644
--- a/im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest
+++ /dev/null
@@ -1,1 +0,0 @@
-
deleted file mode 100644
--- a/im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-#filter substitution
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>{972ce4c6-7e08-4474-a285-3208198ce6fd}</em:id>
-    <em:version>@INSTANTBIRD_VERSION@</em:version>
-
-    <!-- Target Application this theme can install into,
-         with minimum and maximum supported versions. -->
-    <em:targetApplication>
-      <Description>
-        <em:id>{33cb9019-c295-46dd-be21-8c4936574bee}</em:id>
-        <em:minVersion>@INSTANTBIRD_VERSION@</em:minVersion>
-        <em:maxVersion>@INSTANTBIRD_VERSION@</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:name>Instantbird (default)</em:name>
-    <em:description>The default theme.</em:description>
-
-    <!-- EXTENSION AUTHORS!
-         DO NOT COPY THIS PROPERTY INTO YOUR INSTALL RDF FILES
-         It will cause users not to be informed of incompatibilities
-         with your extension when they are updated with Software Update
-         and your extension will become unavailable to them!
-         -->
-    <em:appManaged>true</em:appManaged>
-
-    <em:locked>true</em:locked>
-
-    <!-- Front End Integration Hooks (used by Theme Manager)-->
-    <em:creator>Instantbird</em:creator>
-    <em:contributor>Mozilla, Instantbird and Pidgin Contributors</em:contributor>
-
-    <em:internalName>classic/1.0</em:internalName>
-  </Description>
-
-</RDF>
deleted file mode 100644
--- a/im/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/moz.build
+++ /dev/null
@@ -1,15 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DEFINES['INSTANTBIRD_VERSION'] = CONFIG['INSTANTBIRD_VERSION']
-
-FINAL_TARGET_FILES.extensions['{972ce4c6-7e08-4474-a285-3208198ce6fd}'] += [
-    'chrome.manifest',
-    'preview.png',
-]
-
-FINAL_TARGET_PP_FILES.extensions['{972ce4c6-7e08-4474-a285-3208198ce6fd}'] += [
-    'install.rdf',
-]
deleted file mode 100644
index e36179e8d8fb32ab57d283fb9bd8dc8976fe0f47..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/app/profile/localstore.rdf
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<RDF:RDF
-     xmlns:NC="http://home.netscape.com/NC-rdf#"
-     xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-</RDF:RDF>
deleted file mode 100644
--- a/im/app/profile/mimeTypes.rdf
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0"?>  
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-<!--
- This file is used as a persistent data store for helper application
- information about both MIME type and protocol scheme helpers.
-
- The root of the data are the two containers
- <RDF:Seq about="urn:mimetypes:root"/> and <RDF:Seq about="urn:schemes:root"/>.
-
- These contain one <RDF:li/> entry per MIME type/protocol.  Each <RDF:li/> entry
- corresponds to a "urn:<class>:<type>" resource, where <class> is either
- "mimetype" or "scheme" and <type> is either a MIME type in "major/minor" format
- or a scheme.  For example, for HTML we would have "urn:mimetype:text/html",
- while for mailto: we would have "urn:scheme:mailto".
-
- Typically, this resource will be in the <RDF:Description/> node which has the
- corresponding "about" attribute.
-
- Each "urn:<class>:<type>" resource can have the following properties:
-
-   NC:Value - the MIME type or scheme string
-   NC:editable - a "true" or "false" depending on whether this entry is
-                 editable
-   NC:description - a description of the type ("HTML Document" for text/html)
-   NC:fileExtensions - for MIME types, there will be one of these properties
-                       per extension that corresponds to this MIME type,
-                       each one having a single extension as its value.
-   NC:handlerProp - the way the type should be handled.  This corresponds to a
-                    "urn:<class>:handler:<type>" resource.  Eg, the way HTML is
-                    handled would be stored in the
-                    "urn:mimetype:handler:text/html" resource.
-
- Each "urn:<class>:handler:<type>" resource can have the following properties:
-
-   NC:useSystemDefault - "true" if we should handle per default OS setting,
-                          "false" or not set otherwise
-   NC:saveToDisk - "true" if the data should be saved to disk, "false" or not
-                   set otherwise.
-     (Note - if both of these are false, that means "open in helper app")
-   NC:alwaysAsk - "true" if the user should always be prompted before handling
-                  data of this type, false otherwise.
-   NC:externalApplication - the preferred helper application to use for this
-                            type.  This corresponds to a
-                            "urn:<class>:externalApplication:<type>" resource.
-   NC:possibleApplication - a helper application that can be used for this type.
-                            Since there can be multiple possible applications,
-                            there can be multiple assertions in the graph with
-                            this property for a given handler resource.
-
- Each "urn:<class>:externalApplication:<type>" resource, and each resource
- that represents a possible application, can have the following property:
-
-   NC:prettyName - the "pretty name" of the application ("Acrobat Reader" for
-                   /usr/bin/acroread, eg).
-
- If the resource represents a local application, then it can have the following
- property:
-
-   NC:path - the path to the application on the local filesystem, for example
-             /usr/bin/test or C:\windows\system32\cmd.exe.
-
- If the resource represents a web application, then it can have the following
- property:
-
-   NC:uriTemplate - a URI pointing to the web application to which the type
-                    should be handed off, with %s in the template representing
-                    the place where the content should be inserted. For example,
-                    here is a URI template for a service that lets you email
-                    an address in a mailto: link:
-                      http://www.example.com/sendmail?link=%s
--->
-			
-<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
-         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-  <RDF:Seq RDF:about="urn:schemes:root">
-    <RDF:li RDF:resource="urn:scheme:http"/>
-    <RDF:li RDF:resource="urn:scheme:https"/>
-    <RDF:li RDF:resource="urn:scheme:ftp"/>
-  </RDF:Seq>
-  <RDF:Description RDF:about="urn:scheme:handler:ftp"
-                   NC:useSystemDefault="true"
-                   NC:alwaysAsk="false" />
-  <RDF:Description RDF:about="urn:scheme:handler:https"
-                   NC:useSystemDefault="true"
-                   NC:alwaysAsk="false" />
-  <RDF:Description RDF:about="urn:scheme:handler:http"
-                   NC:useSystemDefault="true"
-                   NC:alwaysAsk="false" />
-  <RDF:Description RDF:about="urn:mimetypes">
-    <NC:MIME-types RDF:resource="urn:mimetypes:root"/>
-  </RDF:Description>
-  <RDF:Seq RDF:about="urn:mimetypes:root">
-  </RDF:Seq>
-  <RDF:Description RDF:about="urn:scheme:ftp"
-                   NC:value="ftp">
-    <NC:handlerProp RDF:resource="urn:scheme:handler:ftp"/>
-  </RDF:Description>
-  <RDF:Description RDF:about="urn:schemes">
-    <NC:Protocol-Schemes RDF:resource="urn:schemes:root"/>
-  </RDF:Description>
-  <RDF:Description RDF:about="urn:root"
-                   NC:en-US_defaultHandlersVersion="-1" />
-  <RDF:Description RDF:about="urn:scheme:https"
-                   NC:value="https">
-    <NC:handlerProp RDF:resource="urn:scheme:handler:https"/>
-  </RDF:Description>
-  <RDF:Description RDF:about="urn:scheme:http"
-                   NC:value="http">
-    <NC:handlerProp RDF:resource="urn:scheme:handler:http"/>
-  </RDF:Description>
-</RDF:RDF>
deleted file mode 100644
--- a/im/app/profile/moz.build
+++ /dev/null
@@ -1,14 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += ['extensions']
-
-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'mac', 'cocoa'):
-    DEFINES['HAVE_SHELL_SERVICE'] = 1
-
-FINAL_TARGET_FILES.defaults.profile += [
-    'localstore.rdf',
-    'mimeTypes.rdf',
-]
deleted file mode 100644
--- a/im/app/profile/prefs.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-# Mozilla User Preferences
-
-/* Do not edit this file.
- *
- * If you make changes to this file while the browser is running,
- * the changes will be overwritten when the browser exits.
- *
- * To make a manual change to preferences, you can visit the URL about:config
- * For more information, see http://www.mozilla.org/unix/customizing.html#prefs
- */
deleted file mode 100644
--- a/im/app/splash.rc
+++ /dev/null
@@ -1,26 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#include <windows.h>
-#include "nsNativeAppSupportWin.h"
-
-1 24 "instantbird.exe.manifest"
-
-#define IDI_APPICON 1
-#define IDI_DOCUMENT 2
-#ifndef IDI_APPLICATION
-#define IDI_APPLICATION 32512
-#endif
-
-// Program icon.
-IDI_APPICON  ICON  INSTANTBIRD_ICO
-2  ICON  "available-16.ico"
-3  ICON  "away-16.ico"
-4  ICON  "offline-16.ico"
-IDI_APPLICATION ICON INSTANTBIRD_ICO
-
-STRINGTABLE DISCARDABLE
-BEGIN
-    IDS_STARTMENU_APPNAME,              "@MOZ_APP_DISPLAYNAME@"
-END
deleted file mode 100644
--- a/im/branding/halloween/Makefile.in
+++ /dev/null
@@ -1,49 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Branding Makefile for nightlies/unofficial branding
-
-include $(moztopsrcdir)/config/rules.mk
-
-export::
-	$(NSINSTALL) -D $(DIST)/branding
-ifeq ($(OS_ARCH),WINNT)
-	cp $(srcdir)/instantbird.ico   $(DIST)/branding/instantbird.ico
-	cp $(srcdir)/instantbird.ico   $(DIST)/branding/app.ico
-	cp $(srcdir)/branding.nsi      $(DIST)/branding/branding.nsi
-	cp $(srcdir)/../nightly/wizHeader.bmp     $(DIST)/branding/wizHeader.bmp
-	cp $(srcdir)/../nightly/wizHeaderRTL.bmp  $(DIST)/branding/wizHeaderRTL.bmp
-	cp $(srcdir)/../nightly/wizWatermark.bmp  $(DIST)/branding/wizWatermark.bmp
-endif
-ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
-	cp $(srcdir)/instantbird.icns  $(DIST)/branding/instantbird.icns
-	cp $(srcdir)/dsstore           $(DIST)/branding/dsstore
-	cp $(srcdir)/background.png    $(DIST)/branding/background.png
-	cp $(srcdir)/disk.icns         $(DIST)/branding/disk.icns
-#	cp $(srcdir)/license.r         $(DIST)/branding/license.r
-endif
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-	cp $(srcdir)/mozicon128.png    $(DIST)/branding/mozicon128.png
-	cp $(srcdir)/mozicon16.xpm     $(DIST)/branding/mozicon16.xpm
-	cp $(srcdir)/mozicon50.xpm     $(DIST)/branding/mozicon50.xpm
-	cp $(srcdir)/default16.png     $(DIST)/branding/default16.png
-endif
-
-# Now sort out the branding specific icons
-ifeq ($(OS_ARCH),WINNT)
-	cp $(srcdir)/windows/blistWindow.ico $(DIST)/branding/blistWindow.ico
-	cp $(srcdir)/windows/convWindow.ico  $(DIST)/branding/convWindow.ico
-	cp $(srcdir)/windows/default.ico     $(DIST)/branding/default.ico
-endif
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-	cp $(srcdir)/gtk/blistWindow.png    $(DIST)/branding/blistWindow.png
-	cp $(srcdir)/gtk/blistWindow16.png  $(DIST)/branding/blistWindow16.png
-	cp $(srcdir)/gtk/blistWindow48.png  $(DIST)/branding/blistWindow48.png
-	cp $(srcdir)/gtk/convWindow.png     $(DIST)/branding/convWindow.png
-	cp $(srcdir)/gtk/convWindow16.png   $(DIST)/branding/convWindow16.png
-	cp $(srcdir)/gtk/convWindow48.png   $(DIST)/branding/convWindow48.png
-	cp $(srcdir)/gtk/default.png        $(DIST)/branding/default.png
-	cp $(srcdir)/gtk/default16.png      $(DIST)/branding/default16.png
-	cp $(srcdir)/gtk/default48.png      $(DIST)/branding/default48.png
-endif
deleted file mode 100644
index e52f31d051010215470ae91fc84a6d29d8645efa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
--- a/im/branding/halloween/branding.nsi
+++ /dev/null
@@ -1,13 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# NSIS defines for nightly builds.
-
-# BrandFullNameInternal is used for some registry and file system values that
-# should not contain release that may be in the BrandFullName (e.g. Beta 1, etc.)
-!define BrandFullNameInternal "Instantbird"
-!define CompanyName           "Instantbird"
-!define URLInfoAbout          "http://www.instantbird.com/"
-!define URLUpdateInfo         "http://www.instantbird.com/"
-
deleted file mode 100644
--- a/im/branding/halloween/configure.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-MOZ_APP_DISPLAYNAME=Instantbird
deleted file mode 100755
index 5d849c960452dcd686787a2250142408f74e4261..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94d9124a3500e9b495b89a6a20d92085f53444d8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index edeff164f6e1e0051b42386b2a9436518643ff9e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2fd3688fbc65e4fbeba242ba9700f6b9f7ffcc8c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 168d162f5ce58b07a1f0310ebbb92bae7d389692..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 327a662f196a293449b0851869ed7699a4ce9ded..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index f5079c58c35136c16e717389f0efb550e14db991..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d0d6164f2d9c25427a9c5ff6db6839607268d7fa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3603b3b4063856d0e09b1312ec91561de78f65d3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 69e9c93cbaa4b355112c9513bce91f57b12c40ae..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index efbdf33ec75157271041d37b6748f5974b3eb0b7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9b4448002972c13f6a40f3be0beb5294a25694ff..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5e5a25f67f474e4e51d1f73eaabaf4ed79c1b3c5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index da20d5966ccc218dfdccdcd80427bfd7493c7d0d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 168d162f5ce58b07a1f0310ebbb92bae7d389692..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c45de92ee22cb66bf2922ad36f93ff5ad503859e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index cb43a814ed7a903003658926fc78b6c7f8167534..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 7803876313ad8e15ffa9a1715d186206e5abc333..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/branding/halloween/jar.mn
+++ /dev/null
@@ -1,10 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-instantbird.jar:
-% content branding %content/branding/
-	content/branding/about-credits.png	(content/about-credits.png)
-	content/branding/about-footer.png	(content/about-footer.png)
-	content/branding/about.png		(content/about.png)
-	content/branding/icon64.png		(content/icon64.png)
deleted file mode 100644
--- a/im/branding/halloween/locales/en-US/brand.dtd
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!-- halloween branding -->
-
-<!ENTITY  brandShortName        "Instantbird">
-<!ENTITY  brandFullName         "Instantbird - Nightly">
-<!ENTITY  brandMotto            "Beware of the Witch!">
-<!ENTITY  vendorShortName       "Instantbird">
deleted file mode 100644
--- a/im/branding/halloween/locales/en-US/brand.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-brandShortName=Instantbird
-brandFullName=Instantbird - Nightly
-vendorShortName=Instantbird
deleted file mode 100755
--- a/im/branding/halloween/locales/jar.mn
+++ /dev/null
@@ -1,10 +0,0 @@
-#filter substitution
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-@AB_CD@.jar:
-% locale branding @AB_CD@ %locale/@AB_CD@/branding/
-	locale/@AB_CD@/branding/brand.dtd		(%brand.dtd)
-	locale/@AB_CD@/branding/brand.properties	(%brand.properties)
deleted file mode 100644
--- a/im/branding/halloween/locales/moz.build
+++ /dev/null
@@ -1,8 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
-
-DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID']
deleted file mode 100644
--- a/im/branding/halloween/moz.build
+++ /dev/null
@@ -1,8 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += ['locales']
-
-JAR_MANIFESTS += ['jar.mn']
deleted file mode 100644
index 8017f948180f14ec0563b8f4d0f2cb91856b09de..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/branding/halloween/mozicon16.xpm
+++ /dev/null
@@ -1,188 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* XPM */
-static char *instantbird___[] = {
-/* columns rows colors chars-per-pixel */
-"16 16 162 2",
-"   c black",
-".  c #010100",
-"X  c #020201",
-"o  c #030301",
-"O  c #050502",
-"+  c #070703",
-"@  c #080803",
-"#  c #090904",
-"$  c #0B0B05",
-"%  c #010508",
-"&  c #010709",
-"*  c #161406",
-"=  c #161408",
-"-  c #191608",
-";  c #1E1D0C",
-":  c #03111D",
-">  c #04181F",
-",  c #181C15",
-"<  c #22210D",
-"1  c #29270F",
-"2  c #2F2B10",
-"3  c #302F13",
-"4  c #393918",
-"5  c #041422",
-"6  c #081E21",
-"7  c #0F1F2E",
-"8  c #071D33",
-"9  c #091E32",
-"0  c #0A1E32",
-"q  c #11252E",
-"w  c #062730",
-"e  c #072935",
-"r  c #072A35",
-"t  c #072936",
-"y  c #072B38",
-"u  c #072D3A",
-"i  c #1A2F36",
-"p  c #192C39",
-"a  c #18393D",
-"s  c #213537",
-"d  c #283735",
-"f  c #403A13",
-"g  c #254238",
-"h  c #4F481A",
-"j  c #524A18",
-"k  c #544B18",
-"l  c #524D1E",
-"z  c #5A521D",
-"x  c #5D531C",
-"c  c #545323",
-"v  c #535625",
-"b  c #435334",
-"n  c #56543C",
-"m  c #605821",
-"M  c #636226",
-"N  c #676228",
-"B  c #7E7022",
-"V  c #7B7028",
-"C  c #716F30",
-"Z  c #707537",
-"A  c #777833",
-"S  c #75713E",
-"D  c #092E46",
-"F  c #072F4C",
-"G  c #083141",
-"H  c #083240",
-"J  c #093245",
-"K  c #093445",
-"L  c #073449",
-"P  c #09334A",
-"I  c #083549",
-"U  c #0A354A",
-"Y  c #0A344C",
-"T  c #093949",
-"R  c #0A394C",
-"E  c #0A3850",
-"W  c #0B3F55",
-"Q  c #093D5B",
-"!  c #0A424F",
-"~  c #0A4353",
-"^  c #0C465C",
-"/  c #0B4A5B",
-"(  c #0B485D",
-")  c #0C4B5D",
-"_  c #0B4F5E",
-"`  c #0C4C5F",
-"'  c #1B5356",
-"]  c #3E5C50",
-"[  c #325C59",
-"{  c #345E59",
-"}  c #0D4E64",
-"|  c #0D4D66",
-" . c #0C5162",
-".. c #0C5264",
-"X. c #0C5667",
-"o. c #0D566A",
-"O. c #0D5D6C",
-"+. c #1C6067",
-"@. c #4F5751",
-"#. c #777648",
-"$. c #75754E",
-"%. c #7A7C4F",
-"&. c #646C54",
-"*. c #7E7D55",
-"=. c #857E34",
-"-. c #847E35",
-";. c #817E4F",
-":. c #8E802B",
-">. c #938428",
-",. c #938429",
-"<. c #95862B",
-"1. c #8D8335",
-"2. c #988C34",
-"3. c #988C35",
-"4. c #988E37",
-"5. c #95893D",
-"6. c #988F38",
-"7. c #9F9536",
-"8. c #94933E",
-"9. c #9B9138",
-"0. c #98923B",
-"q. c #98933D",
-"w. c #9D973C",
-"e. c #9D983C",
-"r. c #9C983F",
-"t. c #A09130",
-"y. c #A09537",
-"u. c #A99A34",
-"i. c #AE9F37",
-"p. c #A89D3A",
-"a. c #AA9F3B",
-"s. c #AA9E3C",
-"d. c #B9A32E",
-"f. c #BEA62D",
-"g. c #ABA13C",
-"h. c #A9A23E",
-"j. c #BAA533",
-"k. c #B0A53C",
-"l. c #B6AB3B",
-"z. c #B0A83D",
-"x. c #B0AA3E",
-"c. c #B7AC3C",
-"v. c #C0AC36",
-"b. c #989640",
-"n. c #999741",
-"m. c #9A9741",
-"M. c #9A9941",
-"N. c #989942",
-"B. c #9B9D42",
-"V. c #9B9F44",
-"C. c #978F50",
-"Z. c #A09E40",
-"A. c #A99A40",
-"S. c #868561",
-"D. c #C0AE4F",
-"F. c #DEC763",
-"G. c #E5CF6C",
-"H. c #FCE173",
-"J. c #FFE57D",
-"K. c #FFE789",
-"L. c #FFEB9A",
-"P. c None",
-/* pixels */
-"P.P.P.P.P.P.P.P.D P.P.P.P.P.P.P.",
-"P.P.P.P.P.P K H ( u I Y P.P.P.P.",
-"P.P.P.&.J y e / o.) r t E P.P.P.",
-"P.J.G.U G T ~ ..!  .w ^ W Q P.P.",
-"K.H.s.{ | } ` _ O.X.& > R L F P.",
-"K.F.a.h.Z b g ' +.6     a [ ] P.",
-"L.D.w.k.z.Z.B.V.v .   # N.n.q.S.",
-"P.A.i.r.e.l.c.x.M +   4 M.b.0.%.",
-"P.#.9.u.7.M.A <     o X >.v.j.C.",
-"P.p -.6.p.g.m.8.c   $ C 3 l V n ",
-"P.P.s 1.4.y.f.d.,..   @ 1 = m P.",
-"P.P.0 i =.3.2.t.<.*       k *.P.",
-"P.P.P.: q N z h 2 O   - B 5.P.P.",
-"P.      % 5 , ; f j x :.;.P.P.P.",
-"P.      P.7 9 8 d S $.@.P.P.P.P.",
-"P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P."
-};
deleted file mode 100644
--- a/im/branding/halloween/mozicon50.xpm
+++ /dev/null
@@ -1,309 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* XPM */
-static char *instantbird___[] = {
-/* columns rows colors chars-per-pixel */
-"48 48 251 2",
-"   c #000000",
-".  c #080702",
-"X  c #0C0C04",
-"o  c #01070A",
-"O  c #0A0B08",
-"+  c #131207",
-"@  c #181507",
-"#  c #1D1907",
-"$  c #141408",
-"%  c #191708",
-"&  c #1C1A0A",
-"*  c #020B11",
-"=  c #021014",
-"-  c #03161C",
-";  c #141A15",
-":  c #1A1B13",
-">  c #22200D",
-",  c #28240C",
-"<  c #2D290D",
-"1  c #39330E",
-"2  c #2D2C14",
-"3  c #312D10",
-"4  c #343214",
-"5  c #3A3513",
-"6  c #3E3A16",
-"7  c #3B3C1A",
-"8  c #041424",
-"9  c #041D24",
-"0  c #091924",
-"q  c #051728",
-"w  c #0E1F2F",
-"e  c #161E25",
-"r  c #121F2B",
-"t  c #041D34",
-"y  c #0B1F32",
-"u  c #051F3B",
-"i  c #062634",
-"p  c #0C2133",
-"a  c #062935",
-"s  c #0B2C34",
-"d  c #05223B",
-"f  c #072C3A",
-"g  c #092D3C",
-"h  c #1C2F32",
-"j  c #07303B",
-"k  c #0A313E",
-"l  c #242B2D",
-"z  c #272E32",
-"x  c #263337",
-"c  c #263E32",
-"v  c #25393A",
-"b  c #393E3B",
-"n  c #413D18",
-"m  c #2E4335",
-"M  c #354233",
-"N  c #3D4530",
-"B  c #4C4315",
-"V  c #44421B",
-"C  c #4B4519",
-"Z  c #4F4A1A",
-"A  c #544C1A",
-"S  c #5E551E",
-"D  c #655716",
-"F  c #62581E",
-"G  c #6E611B",
-"H  c #504F22",
-"J  c #545323",
-"K  c #455234",
-"L  c #4B533B",
-"P  c #555B34",
-"I  c #5B5F35",
-"U  c #555339",
-"Y  c #625C22",
-"T  c #6E6321",
-"R  c #63652B",
-"E  c #6B6528",
-"W  c #65682C",
-"Q  c #6D6C2F",
-"!  c #726723",
-"~  c #756A24",
-"^  c #706B2F",
-"/  c #796F29",
-"(  c #7E7125",
-")  c #76722D",
-"_  c #7C732B",
-"`  c #636532",
-"'  c #6B6B36",
-"]  c #6F7231",
-"[  c #64713C",
-"{  c #797B34",
-"}  c #052640",
-"|  c #062A43",
-" . c #092D44",
-".. c #052E4C",
-"X. c #073247",
-"o. c #083442",
-"O. c #083845",
-"+. c #073049",
-"@. c #08344D",
-"#. c #093C4B",
-"$. c #173948",
-"%. c #063555",
-"&. c #063956",
-"*. c #0A3D54",
-"=. c #053758",
-"-. c #063C5E",
-";. c #083D5B",
-":. c #073F60",
-">. c #0A414F",
-",. c #0A4252",
-"<. c #0B445B",
-"1. c #0B4B5C",
-"2. c #1E4652",
-"3. c #1C515F",
-"4. c #264145",
-"5. c #2D4B4B",
-"6. c #3F4542",
-"7. c #3E6F5D",
-"8. c #0A4462",
-"9. c #0D4B64",
-"0. c #164F63",
-"q. c #0C5365",
-"w. c #0D5569",
-"e. c #0D596B",
-"r. c #185C67",
-"t. c #105769",
-"y. c #226265",
-"u. c #2B6662",
-"i. c #356B60",
-"p. c #414846",
-"a. c #4D524B",
-"s. c #565C4D",
-"d. c #466A53",
-"f. c #4B7559",
-"g. c #597653",
-"h. c #67674F",
-"j. c #6C6D4F",
-"k. c #667C4E",
-"l. c #69784A",
-"z. c #7F7D40",
-"x. c #696B55",
-"c. c #676C59",
-"v. c #7C7B5B",
-"b. c #817426",
-"n. c #8B7920",
-"m. c #81762A",
-"M. c #84792C",
-"N. c #8A7C2A",
-"B. c #847E32",
-"V. c #807D54",
-"C. c #75844B",
-"Z. c #94862D",
-"A. c #98872A",
-"S. c #978A2C",
-"D. c #98892D",
-"F. c #878134",
-"G. c #8D8332",
-"H. c #848238",
-"J. c #8B823D",
-"K. c #86883B",
-"L. c #8A8B3B",
-"P. c #928533",
-"I. c #968A33",
-"U. c #988C34",
-"Y. c #938D3A",
-"T. c #988F38",
-"R. c #9A9236",
-"E. c #94933F",
-"W. c #98923C",
-"Q. c #9C983E",
-"!. c #A89227",
-"~. c #A5912C",
-"^. c #AA962B",
-"/. c #B39C2C",
-"(. c #A59533",
-"). c #A79834",
-"_. c #AC9C33",
-"`. c #A0963A",
-"'. c #A49D3C",
-"]. c #B39F31",
-"[. c #B19F3B",
-"{. c #BBA027",
-"}. c #BBA129",
-"|. c #A5A13F",
-" X c #ACA33C",
-".X c #AFA83F",
-"XX c #B4A234",
-"oX c #B9A532",
-"OX c #BDAA35",
-"+X c #B5A638",
-"@X c #B4A93C",
-"#X c #BBAD3A",
-"$X c #BEB03A",
-"%X c #C3A92C",
-"&X c #C9AC2B",
-"*X c #CFB22E",
-"=X c #D4B52C",
-"-X c #C2AE35",
-";X c #C0AF38",
-":X c #C7B034",
-">X c #CCB534",
-",X c #CEB837",
-"<X c #CAB738",
-"1X c #D0B633",
-"2X c #D4BA34",
-"3X c #D7BB3E",
-"4X c #8D8646",
-"5X c #838A45",
-"6X c #8E874A",
-"7X c #8E8849",
-"8X c #8A9247",
-"9X c #959541",
-"0X c #999640",
-"qX c #9B9B42",
-"wX c #848154",
-"eX c #8E8950",
-"rX c #8E8B5B",
-"tX c #938C53",
-"yX c #9E9556",
-"uX c #96915C",
-"iX c #A09C40",
-"pX c #9BA044",
-"aX c #A5A240",
-"sX c #A9A440",
-"dX c #B2A247",
-"fX c #B7A74B",
-"gX c #B0A151",
-"hX c #928E62",
-"jX c #EECE47",
-"kX c #EED15B",
-"lX c #FFDF5D",
-"zX c #D2C16E",
-"xX c #DCC76A",
-"cX c #DEC868",
-"vX c #FFDF61",
-"bX c #FADE6B",
-"nX c #EDD674",
-"mX c #F0D976",
-"MX c #F7DF7B",
-"NX c #FFE065",
-"BX c #FFE16A",
-"VX c #FFE373",
-"CX c #FEE47D",
-"ZX c #E1D188",
-"AX c #FFE682",
-"SX c #FFE78A",
-"DX c #FFE88D",
-"FX c #FFE994",
-"GX c #FFEB9B",
-"HX c #FFECA3",
-"JX c None",
-/* pixels */
-"JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXd  .+.@.*.*.*.@. .| u JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXd @.<.g a f k #.<.O.a a g 9.*. .d JXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJXJXJXJX} *.9.q.#.a a a o.<.q.q.#.a a #.*.8.9.@.d JXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJXJXd *.9.<.k *.a a a a q.w.w.w.9.f a a a a 9.9.<. .JXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJX| 8.9.*.a a a a a a #.w.w.w.w.w.w.f a a a g f f 8.&.d JXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXGXDXAXzX .f g O.o.a a a a a 1.w.w.w.w.w.w.w.<.a a a i i i o.9.;.d JXJXJXJXJXJXJXJX",
-"JXJXJXJXJXFXVXVXVXxX$.a i i i a a a a a o.w.e.e.e.e.w.w.w.w.O.#.k O.a i f *.9.<.} JXJXJXJXJXJXJX",
-"JXJXJXFXVXBXVXNXnX4. .i i i i a a a a j q.e.e.w.q.q.q.q.w.w.O.#.q.q.9.9.9.9.9.8.;.d JXJXJXJXJXJX",
-"JXJXFXVXvXAXlXMXz.*.i i i i o.o.a o.#.#.e.e.w.O.j f f o.q.w.j   a q.9.9.*.<.9.8.8.%.d JXJXJXJXJX",
-"JXFXCXlXAXVXvXfXl.*.<.9.*.*.q.q.q.w.w.w.e.e.e.e.q.#.1.e.e.w.j     - 9.9.o.i <.8.8.:...JXJXJXJXJX",
-"JXAXVXBXAXBXkXW.9X3.9.9.9.9.q.q.w.w.w.w.e.e.e.e.e.e.e.e.e.w.f       a 9.<.i i X.8.:.-.d JXJXJXJX",
-"FXAXBXVXAXVX2X0X0XC.9.9.9.9.q.q.q.w.w.w.1.q.e.e.e.e.e.e.w.w.=         <.9.@.i i i &.-...JXJXJXJX",
-"DXAXVXBXAXcX:X'.0XqXk.0.9.9.9.q.1.,.9.,.a a O.1.e.e.e.e.q.a           = 9.8.@.@.f ..-.=.d JXJXJX",
-"SXAXCXlXAXdX X,X'.qXqX8Xd.k a o.g a f a a a >.w.e.e.e.o.o               * *.9.8.8.-.-.=...JXJXJX",
-"DXAXAXNXbXT.W.#X>XiXqXqXU.Z.` K c s a a O.#.w.e.e.w.1.a 9               - o @.8.8.-.<.2.5.s.JXJX",
-"GXAXAXCXjXR.W.0X;X>X|.Q.qXQ.R.R.S.S.B.[ f.7.i.u.y.r.t.#.                m g.k.C.5X9XW.W.W.T.JXJX",
-"HXAXAXAX3X+XW.0X0X#X2X#XqXqXqXqXqXR.qXqXqXpXpXpXpX] W .               . J qXqX0X0X0XW.W.W.U.JXJX",
-"JXAXAXAX[.1XQ.W.0X0X X,X2X.XqXqXqXqXqXqXqXqXqXqXqX7                   + qXqXqX0X0XW.W.W.W.U.hXJX",
-"JXGXAXAXT.oX:XQ.0X0X0XqX@X2X,X@XqXqXqXqXqXqXqXqXqXV   X             $ > qXqX0X0X0XW.W.W.R.U.uXJX",
-"JXJXAXCXU.W.:X-XQ.0X0X0XqXqX#X2X2X$XsXqXqXqXqXqXK.+ Q 4             Q qXqX0X0X0XW.W.W.W.T.U.tXJX",
-"JXJXFXmXU.T.`.1XOXW.0X0XqXqXQ.aX$X2X2X2X$X.XqXqXR L.{ +             & 9XqX0X0X0XW.W.W.W.T.U.7XJX",
-"JXJXJXnXU.T.R._.2X+X0X0XW.R.S.R.qXqXsX#X,X2X2X<X_.Z                   H 0X0X0XW.W.W.W.T.U.U.4XJX",
-"JXJXJXZXU.U.T.W.XX2X_.U.S.S.R.qXqXqXqX9XK.) Y 1                     X . H.0XW.W.W.W.T.T.U.U.eXJX",
-"JXJXJXJXP.U.T.T.W._.=XXXI.R.0X0XqXqX9X>                                 1 >X>X:X-XOXoXoX]._.yXJX",
-"JXJXJXJXL U.U.T.T.W.'.1X-XQ.0X0X0XqXqX9XJ 4 .                   & .       G 2X2X2X2X=X=X=X=XgXJX",
-"JXJXJXJXd ' U.U.T.T.W.'.>X>X'.0X0X0X0X0XqXqXE.Q V 2             7 L.V .     5 T.R.(.(.)._./.rXJX",
-"JXJXJXJXp g B.U.U.T.T.W.`.:X2X;XQ.0X0X0X0X0X0X0X0X0X            2 W.W.F.6     > _ U.U.U.I.~ : JX",
-"JXJXJXJXr d v I.U.U.T.T.W.W. X1X1X+XQ.0X0X0X0X0X0X0X$           . J Y.W.W.F.n .   4 S 4 .     JX",
-"JXJXJXJXJXd d K U.U.U.T.T.T.W.R.OX2X1XoX`.W.R.U.W.I.,               X n E B.G._         < U JXJX",
-"JXJXJXJXJXy t d P U.U.U.U.T.T.R.W.(.&X=X=X%X^.A.A.A.5                             & S N.I.s.JXJX",
-"JXJXJXJXJXr t t d I U.U.U.U.U.T.T.U.A./.&X=X=X=X%X/.A                             A D.D.wXJXJXJX",
-"JXJXJXJXJXJXy t t t ` I.U.U.U.U.U.T.U.I.U.~.}.=X=X2X&X#                           ~ D.G.p.JXJXJX",
-"JXJXJXJXJXJXJXu t t d ` I.I.U.U.U.U.U.U.U.U.U.D.).XX-Xn.                        > D.D.c.JXJXJXJX",
-"JXJXJXJXJXJXJXr t t t t P I.I.I.U.U.U.U.U.U.U.U./ V +                       . B !./.J.JXJXJXJXJX",
-"JXJXJXJXJXJXJXJXy t t t t M P.I.I.I.I.U.U.m.C @   > A 3                 @ D {.=X=X*Xh.JXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJX0 8 8 t t h M.D.D.M.A &   & A M.~ &                 < Z.D.D.D.~.V.JXJXJXJXJXJX",
-"JXJXJXJXJXJXJX          * t t 0 2 %   + B ! F 6 @                   5 Z.D.D.D.I.j.JXJXJXJXJXJXJX",
-"JXJXJXJXJX                o       ; Y Z.A .                       B D.D.D.D.P.x.JXJXJXJXJXJXJXJX",
-"JXJX                        * 8 t t q O         X < B T ~ ! ~ ( N.D.D.D.D.J.a.JXJXJXJXJXJXJXJXJX",
-"JXJXJX                      y t t 8     o : A b.D.D.D.D.D.D.D.D.D.D.D.I.wXl JXJXJXJXJXJXJXJXJXJX",
-"JXJXJX                      e r y t t t t t p N Q Z.D.D.D.D.D.D.D.I.wX6.JXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJX                    JXJXJXe r y t t t t t t p N ^ Z.D.I.6Xv.b JXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJX                  JXJXJXJXJXJXJXJXe e r w y y y y y x s.z e JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJX        JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXe JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJX  JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX",
-"JXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJXJX"
-};
deleted file mode 100755
index d35bdf23773a247dc167e8449d5a00927912d330..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 334120b29d212ed7c87310823e569ee9afd4c594..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 7803876313ad8e15ffa9a1715d186206e5abc333..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/branding/nightly/Makefile.in
+++ /dev/null
@@ -1,49 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Branding Makefile for nightlies/unofficial branding
-
-include $(moztopsrcdir)/config/rules.mk
-
-export::
-	$(NSINSTALL) -D $(DIST)/branding
-ifeq ($(OS_ARCH),WINNT)
-	cp $(srcdir)/instantbird.ico   $(DIST)/branding/instantbird.ico
-	cp $(srcdir)/instantbird.ico   $(DIST)/branding/app.ico
-	cp $(srcdir)/branding.nsi      $(DIST)/branding/branding.nsi
-	cp $(srcdir)/wizHeader.bmp     $(DIST)/branding/wizHeader.bmp
-	cp $(srcdir)/wizHeaderRTL.bmp  $(DIST)/branding/wizHeaderRTL.bmp
-	cp $(srcdir)/wizWatermark.bmp  $(DIST)/branding/wizWatermark.bmp
-endif
-ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
-	cp $(srcdir)/instantbird.icns  $(DIST)/branding/instantbird.icns
-	cp $(srcdir)/dsstore           $(DIST)/branding/dsstore
-	cp $(srcdir)/background.png    $(DIST)/branding/background.png
-	cp $(srcdir)/disk.icns         $(DIST)/branding/disk.icns
-#	cp $(srcdir)/license.r         $(DIST)/branding/license.r
-endif
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-	cp $(srcdir)/mozicon128.png    $(DIST)/branding/mozicon128.png
-	cp $(srcdir)/mozicon16.xpm     $(DIST)/branding/mozicon16.xpm
-	cp $(srcdir)/mozicon50.xpm     $(DIST)/branding/mozicon50.xpm
-	cp $(srcdir)/default16.png     $(DIST)/branding/default16.png
-endif
-
-# Now sort out the branding specific icons
-ifeq ($(OS_ARCH),WINNT)
-	cp $(srcdir)/windows/blistWindow.ico $(DIST)/branding/blistWindow.ico
-	cp $(srcdir)/windows/convWindow.ico  $(DIST)/branding/convWindow.ico
-	cp $(srcdir)/windows/default.ico     $(DIST)/branding/default.ico
-endif
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-	cp $(srcdir)/gtk/blistWindow.png    $(DIST)/branding/blistWindow.png
-	cp $(srcdir)/gtk/blistWindow16.png  $(DIST)/branding/blistWindow16.png
-	cp $(srcdir)/gtk/blistWindow48.png  $(DIST)/branding/blistWindow48.png
-	cp $(srcdir)/gtk/convWindow.png     $(DIST)/branding/convWindow.png
-	cp $(srcdir)/gtk/convWindow16.png   $(DIST)/branding/convWindow16.png
-	cp $(srcdir)/gtk/convWindow48.png   $(DIST)/branding/convWindow48.png
-	cp $(srcdir)/gtk/default.png        $(DIST)/branding/default.png
-	cp $(srcdir)/gtk/default16.png      $(DIST)/branding/default16.png
-	cp $(srcdir)/gtk/default48.png      $(DIST)/branding/default48.png
-endif
deleted file mode 100644
index e52f31d051010215470ae91fc84a6d29d8645efa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
--- a/im/branding/nightly/branding.nsi
+++ /dev/null
@@ -1,13 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# NSIS defines for nightly builds.
-
-# BrandFullNameInternal is used for some registry and file system values that
-# should not contain release that may be in the BrandFullName (e.g. Beta 1, etc.)
-!define BrandFullNameInternal "Instantbird"
-!define CompanyName           "Instantbird"
-!define URLInfoAbout          "http://www.instantbird.com/"
-!define URLUpdateInfo         "http://www.instantbird.com/"
-
deleted file mode 100644
--- a/im/branding/nightly/configure.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-MOZ_APP_DISPLAYNAME=Instantbird
deleted file mode 100755
index 5df30c77fd5f82a1de8fe54f7ddb00bf48006669..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94d9124a3500e9b495b89a6a20d92085f53444d8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index b87eacc68fa007931056e9604eae39f48c5874ea..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 37a25b24f28233b6812f9e2e03ce73400ef18bfc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 09dcf2a708548e619042d9fdbbc75ed7ad338052..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 327a662f196a293449b0851869ed7699a4ce9ded..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index f5079c58c35136c16e717389f0efb550e14db991..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 67ea00f472835f62d140e1519f784324d49f3b6e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9b90db18c95c454b38a6834b4f013d24a56d2991..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b333013e64563a3c4abe54836b7774093714e900..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2d06a57a0fefd2de179e9a1322710b78e7346af4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 479e54a2c50a7fb10a1039ff1f43380f9b33ed9d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fc923ed3f9ccb42397ab312254fcb7baf1f820e9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index abc6fbf0b3e6ff3463cb6a743e077db47c4f6f7b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 09dcf2a708548e619042d9fdbbc75ed7ad338052..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5e9c2200ee3553e6fc90aa7345d9fb5805c3f041..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 1529369a8f3891324a75d212de077b2b4afc0ee1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index a1740b26cf9f1db274b65efacb25dc5e47131c12..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/branding/nightly/jar.mn
+++ /dev/null
@@ -1,10 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-instantbird.jar:
-% content branding %content/branding/
-	content/branding/about-credits.png	(content/about-credits.png)
-	content/branding/about-footer.png	(content/about-footer.png)
-	content/branding/about.png		(content/about.png)
-	content/branding/icon64.png		(content/icon64.png)
deleted file mode 100644
--- a/im/branding/nightly/locales/en-US/brand.dtd
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!-- nightly branding -->
-
-<!ENTITY  brandShortName        "Instantbird">
-<!ENTITY  brandFullName         "Instantbird - Nightly">
-<!ENTITY  brandMotto            "'Cause geeks can also do magic!">
-<!ENTITY  vendorShortName       "Instantbird">
deleted file mode 100644
--- a/im/branding/nightly/locales/en-US/brand.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-brandShortName=Instantbird
-brandFullName=Instantbird - Nightly
-vendorShortName=Instantbird
deleted file mode 100755
--- a/im/branding/nightly/locales/jar.mn
+++ /dev/null
@@ -1,10 +0,0 @@
-#filter substitution
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-@AB_CD@.jar:
-% locale branding @AB_CD@ %locale/@AB_CD@/branding/
-	locale/@AB_CD@/branding/brand.dtd		(%brand.dtd)
-	locale/@AB_CD@/branding/brand.properties	(%brand.properties)
deleted file mode 100644
--- a/im/branding/nightly/locales/moz.build
+++ /dev/null
@@ -1,8 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
-
-DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID']
deleted file mode 100644
--- a/im/branding/nightly/moz.build
+++ /dev/null
@@ -1,8 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += ['locales']
-
-JAR_MANIFESTS += ['jar.mn']
deleted file mode 100644
index 5f94a95e5048b89b1957d2d86ebf22c43ec4b899..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/branding/nightly/mozicon16.xpm
+++ /dev/null
@@ -1,193 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* XPM */
-static char *instantbird___[] = {
-/* columns rows colors chars-per-pixel */
-"16 16 167 2",
-"   c black",
-".  c #020100",
-"X  c #030101",
-"o  c #020202",
-"O  c gray1",
-"+  c gray2",
-"@  c #060606",
-"#  c #070707",
-"$  c #0B0B0B",
-"%  c #0C0C0C",
-"&  c #15100C",
-"*  c #101010",
-"=  c #111111",
-"-  c gray7",
-";  c #151515",
-":  c gray9",
-">  c gray11",
-",  c gray12",
-"<  c #2A1400",
-"1  c #301E18",
-"2  c #212020",
-"3  c gray13",
-"4  c #232323",
-"5  c #272121",
-"6  c gray14",
-"7  c #252525",
-"8  c gray15",
-"9  c gray16",
-"0  c #2F2F2F",
-"q  c #33302D",
-"w  c gray20",
-"e  c #343434",
-"r  c #353535",
-"t  c gray22",
-"y  c #3A3A3A",
-"u  c #46120C",
-"i  c #501F15",
-"p  c #521E14",
-"a  c #4D261A",
-"s  c #562217",
-"d  c #572318",
-"f  c #582418",
-"g  c #693200",
-"h  c #6A3200",
-"j  c #773800",
-"k  c #7D3B00",
-"l  c #7A3C0F",
-"z  c #512E20",
-"x  c #5B2F28",
-"c  c #423122",
-"v  c #553127",
-"b  c #543A24",
-"n  c #543129",
-"m  c #663520",
-"M  c #6E3E27",
-"N  c #613628",
-"B  c #723E29",
-"V  c #7F4919",
-"C  c #6F432B",
-"Z  c #7C4222",
-"A  c #794523",
-"S  c #74402B",
-"D  c #76422C",
-"F  c #75452E",
-"G  c #78472F",
-"H  c #63453C",
-"J  c #6F483A",
-"K  c #764430",
-"L  c #744731",
-"P  c #754A31",
-"I  c #754B32",
-"U  c #774B35",
-"Y  c #774C37",
-"T  c #794834",
-"R  c #474544",
-"E  c #464646",
-"W  c #494949",
-"Q  c #4B4B4B",
-"!  c #5B5047",
-"~  c gray37",
-"^  c #714E40",
-"/  c #77574A",
-"(  c #7E5E4C",
-")  c #8D440F",
-"_  c #914500",
-"`  c #964700",
-"'  c #984700",
-"]  c #9B4900",
-"[  c #994A03",
-"{  c #93470D",
-"}  c #924C0E",
-"|  c #8A4211",
-" . c #85461C",
-".. c #924B15",
-"X. c #A04C00",
-"o. c #A34F05",
-"O. c #A95000",
-"+. c #AA5000",
-"@. c #AD5200",
-"#. c #A4540E",
-"$. c #BB5800",
-"%. c #A75711",
-"&. c #AB5C15",
-"*. c #AA5C16",
-"=. c #A75C1A",
-"-. c #A4591E",
-";. c #B15E14",
-":. c #834928",
-">. c #914F23",
-",. c #865121",
-"<. c #865224",
-"1. c #8C522F",
-"2. c #935A27",
-"3. c #814D33",
-"4. c #8A5332",
-"5. c #8B5635",
-"6. c #83563A",
-"7. c #86543A",
-"8. c #8D593C",
-"9. c #936134",
-"0. c #B76822",
-"q. c #B96923",
-"w. c #BA6A24",
-"e. c #BF6D24",
-"r. c #BC6E29",
-"t. c #BE6F28",
-"y. c #B97335",
-"u. c #8E6147",
-"i. c #8A634F",
-"p. c #8B644F",
-"a. c #9B6746",
-"s. c #916844",
-"d. c #996A41",
-"f. c #9E6947",
-"g. c #967156",
-"h. c #A06C48",
-"j. c #B07C53",
-"k. c #967C66",
-"l. c #937B69",
-"z. c #A17F65",
-"x. c #B18866",
-"c. c #BB926C",
-"v. c #A78B74",
-"b. c #E79146",
-"n. c #FFA759",
-"m. c #C59F79",
-"M. c #D6A26D",
-"N. c #C5A37F",
-"B. c #CFA87C",
-"V. c #D4A775",
-"C. c #D8A976",
-"Z. c #F8AC67",
-"A. c #FFB36F",
-"S. c #EAB67A",
-"D. c #EEBA7D",
-"F. c #F2BE7F",
-"G. c #FFB97A",
-"H. c #FFBA7D",
-"J. c #FFBB7E",
-"K. c #BDA68B",
-"L. c #C6AC8D",
-"P. c #D6B286",
-"I. c #C9B190",
-"U. c #FFC490",
-"Y. c #F2D09C",
-"T. c #ECD6AA",
-"R. c None",
-/* pixels */
-"R.R.R.R.R.R.R.R.R.R.R.R.9 R.R.R.",
-"R.R.R.R.R.R.8 4 O O + Q W k.R.R.",
-"R.R.R.R.9 y y 7   =   ~ $ * : R.",
-"R.G.Z.c t r 6 = : 4 + @   o R.R.",
-"J.n.;.& # -     @           @ R.",
-"A.b.O.k < .       % > #     X R.",
-"H.e.] $.X._ j h g V ,.z H ( U i ",
-"U.%.+.' ) | @.' ` [ &.C L.u.j.P ",
-"R.} o...v.p.{ m L l *.A g.6.I a ",
-"R.b #. .N.c.5.l.z.B.Y n 5 2 3 = ",
-"R., <.&.Z f.T I.x.a.h.v w r e R.",
-"R.R.q 2.=.4.:.>.1.7.x / ^ J N u ",
-"R.R.R.R 9.-.0.q.w.M K.i.Y.C.3.B ",
-"R.R.R.> E s.r.t.t.G T.P.K 8.D.D ",
-"R.R.R.R.R.0 ! d.y.F m.V.M.S.F.S ",
-"R.R.R.R.R.R.R.; : 1 R.R.s d f p "
-};
deleted file mode 100644
--- a/im/branding/nightly/mozicon50.xpm
+++ /dev/null
@@ -1,314 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* XPM */
-static char *instantbird___[] = {
-/* columns rows colors chars-per-pixel */
-"48 48 256 2",
-"   c #000000",
-".  c #0C0503",
-"X  c #0B0B0B",
-"o  c #1A0902",
-"O  c #141414",
-"+  c #1B1B1B",
-"@  c #1F1515",
-"#  c #1C1108",
-"$  c #2A0B0A",
-"%  c #350201",
-"&  c #3D0B07",
-"*  c #380907",
-"=  c #371B03",
-"-  c #381A00",
-";  c #3E140F",
-":  c #231815",
-">  c #381613",
-",  c #372414",
-"<  c #242424",
-"1  c #2C2C2C",
-"2  c #3A2B2B",
-"3  c #392828",
-"4  c #353535",
-"5  c #3A3A3A",
-"6  c #3E3535",
-"7  c #420E0A",
-"8  c #44120D",
-"9  c #4A160F",
-"0  c #541C0E",
-"q  c #451511",
-"w  c #481711",
-"e  c #4D1B14",
-"r  c #461814",
-"t  c #501D13",
-"y  c #4F270F",
-"u  c #552800",
-"i  c #5A200C",
-"p  c #4B231D",
-"a  c #492018",
-"s  c #542115",
-"d  c #582312",
-"f  c #53241B",
-"g  c #592519",
-"h  c #5B2B1E",
-"j  c #572A1D",
-"k  c #64280A",
-"l  c #702B01",
-"z  c #693200",
-"x  c #753302",
-"c  c #7A3808",
-"v  c #632B13",
-"b  c #632B18",
-"n  c #6C3416",
-"m  c #783817",
-"M  c #452A28",
-"N  c #562C23",
-"B  c #5B2D23",
-"V  c #5A332A",
-"C  c #4B3E3E",
-"Z  c #643323",
-"A  c #6B3A27",
-"S  c #61362A",
-"D  c #6C3D2A",
-"F  c #693624",
-"G  c #723E2A",
-"H  c #653D33",
-"J  c #534239",
-"K  c #6F412E",
-"L  c #73462D",
-"P  c #79522F",
-"I  c #634C38",
-"U  c #7C4A33",
-"Y  c #744C3A",
-"T  c #784A37",
-"R  c #6E5137",
-"E  c #7C513C",
-"W  c #454545",
-"Q  c #4C4C4C",
-"!  c #484040",
-"~  c #514646",
-"^  c #545353",
-"/  c #5A5A5A",
-"(  c #5A524A",
-")  c #734F43",
-"_  c #775545",
-"`  c #696159",
-"'  c #646464",
-"]  c #6B6B6A",
-"[  c #727272",
-"{  c #7C726A",
-"}  c #8C0000",
-"|  c #AE0000",
-" . c #813C01",
-".. c #833907",
-"X. c #E20000",
-"o. c #F80000",
-"O. c #DA2D04",
-"+. c #8C4303",
-"@. c #964700",
-"#. c #974801",
-"$. c #9B4B02",
-"%. c #9D4F09",
-"&. c #90480D",
-"*. c #9F5009",
-"=. c #8C4918",
-"-. c #954C14",
-";. c #8E531E",
-":. c #93541B",
-">. c #9D551B",
-",. c #9D581A",
-"<. c #A44E01",
-"1. c #A14601",
-"2. c #AD5403",
-"3. c #A3530C",
-"4. c #A55105",
-"5. c #B35400",
-"6. c #BD5900",
-"7. c #B85700",
-"8. c #A65710",
-"9. c #AB5C15",
-"0. c #A55A17",
-"q. c #AF6019",
-"w. c #B2631C",
-"e. c #8B563A",
-"r. c #8C5A3C",
-"t. c #855535",
-"y. c #925E3E",
-"u. c #915E31",
-"i. c #8D6037",
-"p. c #97623F",
-"a. c #AC662B",
-"s. c #B66721",
-"d. c #B76925",
-"f. c #BA6B24",
-"g. c #BE6F28",
-"h. c #B56728",
-"j. c #A76D38",
-"k. c #B77337",
-"l. c #C35D00",
-"z. c #C95F00",
-"x. c #CD6100",
-"c. c #D26300",
-"v. c #D36B0F",
-"b. c #D66D10",
-"n. c #C1722B",
-"m. c #815640",
-"M. c #8F5D41",
-"N. c #835E4C",
-"B. c #865C44",
-"V. c #8D654D",
-"C. c #936444",
-"Z. c #9B6D4A",
-"A. c #9A6746",
-"S. c #856B57",
-"D. c #946E53",
-"F. c #977455",
-"G. c #8C7057",
-"H. c #A26E49",
-"J. c #A8754C",
-"K. c #AA7B54",
-"L. c #B37F55",
-"P. c #987866",
-"I. c #EF8323",
-"U. c #FF993E",
-"Y. c #FF973C",
-"T. c #B2865A",
-"R. c #B7875A",
-"E. c #9D8570",
-"W. c #9E856D",
-"Q. c #A5846A",
-"!. c #B88C64",
-"~. c #A78D76",
-"^. c #B1987E",
-"/. c #D68A48",
-"(. c #C78C58",
-"). c #FF9C41",
-"_. c #F39641",
-"`. c #EB9A52",
-"'. c #FFA14D",
-"]. c #FFA555",
-"[. c #FCA659",
-"{. c #FFA95B",
-"}. c #C08F60",
-"|. c #C49262",
-" X c #CB9C69",
-".X c #C99968",
-"XX c #D29F6A",
-"oX c #C29D76",
-"OX c #CFA36D",
-"+X c #D5A46D",
-"@X c #DAA66F",
-"#X c #CCA377",
-"$X c #DDAB73",
-"%X c #D3A776",
-"&X c #DDB07C",
-"*X c #FEAC63",
-"=X c #FFB069",
-"-X c #E2B177",
-";X c #E7B57A",
-":X c #E8B77B",
-">X c #EEBA7D",
-",X c #FFB573",
-"<X c #F2BE7F",
-"1X c #FFB97B",
-"2X c #E8A467",
-"3X c #8B8B8B",
-"4X c #868686",
-"5X c #959595",
-"6X c #9F9F9F",
-"7X c #AE9A83",
-"8X c #B9A186",
-"9X c #B8A991",
-"0X c #BDB398",
-"qX c #AAAAAA",
-"wX c gray63",
-"eX c gray69",
-"rX c #C4A886",
-"tX c #D6AF82",
-"yX c #D8B88A",
-"uX c #D7BE95",
-"iX c #C7B998",
-"pX c #E8BC82",
-"aX c #F6BE82",
-"sX c #CBBEA3",
-"dX c #DBC29B",
-"fX c #EFC68F",
-"gX c #F2C284",
-"hX c #F3C68A",
-"jX c #FFC38D",
-"kX c #F8C68C",
-"lX c #E7C694",
-"zX c #F4CC93",
-"xX c #F5CF98",
-"cX c #FFC490",
-"vX c #F5D29C",
-"bX c #DAC9A7",
-"nX c #DCD2B5",
-"mX c #EDD9AE",
-"MX c #F6D6A2",
-"NX c #F7D9A6",
-"BX c #F7DBA9",
-"VX c #F8DEAD",
-"CX c #E3DCBE",
-"ZX c #E8CFA3",
-"AX c #F9E3B3",
-"SX c #FAE6B8",
-"DX c #FAE9BD",
-"FX c #F3E3BA",
-"GX c #F7EBC3",
-"HX c #FBEEC4",
-"JX c #F4EFCB",
-"KX c #FCF0C7",
-"LX c #FCF3CC",
-"PX c #FBF7D3",
-"IX c #E8E6C6",
-"UX c None",
-/* pixels */
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX| } ",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ + UXUXUXUXo.X.UXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX4 ' eX[ X UXo.UXUXUXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX + + O           UXUXUXUXUX5 6X5 qXqXE.O.UXUXUXUXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ 1 4 5 5 +                   UX1 wX3XQ / qX(.P.X UXUXUXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXO < 5 5 5 5 5 1                     X 5X3X] Q O [ 6X5X' . UXUXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUX< 5 5 5 5 5 5 5 1                     / 3X] Q 1 X   ^ 5X3XO UXUXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXX 4 5 5 5 5 5 5 5 5 5         + X         4X] Q 1 X       < Q O UXUXUXUX",
-"UXUXUXUXUXUXUXUXUX1X2X: 5 5 5 5 5 5 5 5 5 5 5         O 4 1     O ] Q 1 X             O UXUXUXUX",
-"UXUXUXUXUXjX=X{.].`., 5 5 5 5 5 5 5 5 5 5 5 <         X 1 4 +   X W 1 X             O UXUXUXUXUX",
-"UXUXUXjX=X'.].'.[.y 5 5 5 5 5 5 5 4 + < 5 4       O < < 4 4 +     O X             X UXUXUXUXUXUX",
-"UXUXjX*XY.*X).*X:.  5 5 1 4 5 5 5       X .     < 4 4 X + X                         UXUXUXUXUXUX",
-"UXcX*X).*X*XU.n.z X 5 4 X   + 5 1               X O +                                 UXUXUXUXUX",
-"UX=X].'.=X'._.#. .. O       O 1 X                                                       UXUXUXUX",
-"jX=X'.].=X].v.@.@.u                                                                     UXUXUXUX",
-"1X=X].'.=X`.x.$.@.@.-                                         O X                         UXUXUX",
-",X=X*XY.=Xq.5.l.#.@.@.z o                                   X 4 4 +                       UXUXUX",
-",X=X=XU.].#.@.l.l.#.@.@.@.z - o                       1 4 + . 4 4 4 X                     . UXUX",
-"aX=X=X{.I.#.@.$.x.l.$.@.@.@.@.@.@.x u - o .           < 4 4 4 4 4 4 X   . o > > p N N N j s % UX",
-"jX=X=X=Xb.5.@.@.$.z.c.5.@.@.@.@.@.@.@.@.@.@.@.@.+. .x c ;.:.:.>.,.0.y % ) 9XbXFXSXVXvXzX$Xg L 9 ",
-"UX=X=X=X2.c.$.@.@.#.7.c.z.<.@.@.@.@.@.@.@.@.@.@.@.@.@.#.9.9.9.9.9.9.n N N P.GXDXVXMXzX+Xs K.|.e ",
-"UX1X=X=X#.7.x.$.@.@.@.$.l.c.z.2.$.@.@.@.@.@.@.@.@.@.@.@.%.9.9.9.9.9.-.V IXS.N rXNXxX.Xs T.>XXX8 ",
-"UXUX=X*X$.@.l.x.$.@.@.@.@.<...k c.6.<.@.@.@.@.@.@.@.@.@.@.$.8.9.9.9.9.p LXGXrXS T L.g !.<X<X$X7 ",
-"UXUX,X`.$.@.$.x.x.<.@.@.@.l w * c c.c.c.6.2.$.@.@.@.@.@.@.$.9.9.9.9.9.a HXSXVXlXD.F .X<X<X<X-X7 ",
-"UXUXjX/.%.$.$.<.c.c.<.$.x e sXH _ c 5.l.c.c.1.d x @.$.$.$.*.9.9.9.9.9.e FXVXMXzXhX-X<X<X<X<X>X8 ",
-"UXUXUX/.3.$.$.$.4.x.c.l e CXnXH GXZ  .$.%.2.k 8 N.j v c $.$.3.w.q.q.q.a dXNXxXhX<X<X;X+X|.L.H.8 ",
-"UXUXUX!.3.%.%.%.%.3.k _ JXLXbXS SXZXs +.%.%.r 7X) KXuXB.e v &.w.w.w.w.f Y D f 8 * * * * $ $ o UX",
-"UXUXUXUX=.3.3.3.3.3.v 8XKXDXdXS BXMXtX0 %..._ JXN bXAXVXvX!.f p J I R V 3 : @ + + + + + + O X UX",
-"UXUXUXUX, 0.3.3.3.3.%.t mXAXyXB vXzXhXR.i d nXLXW.Y VXMXvXzXgX(.h M ! Q 4 < < < < < < < < O X UX",
-"UXUXUXUXO P 8.8.8.8.8.c m.MXtXB hXgX<X<Xy.N LXHXmXe uXvXzXgX<X<X<XA.% M 1 < < < < < < < < X O UX",
-"UXUXUXUXO ! ;.9.9.9.9.8.0 #X%X7 G y.K..XM.7XHXDXAXD.E zXhX<XXXC.s A 8 4 1 1 1 1 1 1 1 1 1 . UXUX",
-"UXUXUXUXUX< ( 0.9.9.9.9.-.d :XOXR.Z.t.D q GXDXAXBXlXq A.A e F C. X}.a 4 4 4 4 4 4 4 4 5 < X UXUX",
-"UXUXUXUXUXX ^ I 9.9.9.9.9.m e.<X<X<X>X XZ B rXVXMXxXF.C.T.+X-X>X<XF 2 5 5 5 5 5 5 Q ^ Q O O UXUX",
-"UXUXUXUXUXO 4 W L w.w.w.w.q.v R.<X<X<X<Xe.v m b !.hXpX<X<XZ.M.C.r.r 3 3 3 3 2 2 C ~ ~ 6 . UXUXUX",
-"UXUXUXUXUXUXO 5 W P w.w.w.w.9.0 +X<X$XF m g.n.g.=.n H.>X<Xf q ~.9X8X^.~.Q.P.D.V.B.m.T K A b % UX",
-"UXUXUXUXUXUXO + Q Q t.w.w.w.w.>.d H.d >.w.w.g.n.n.g.=.b p.e 9XN sXLXHXDXAXVXNXvXxXzXhXaX@Xg h UX",
-"UXUXUXUXUXUXUXX 1 Q Q u.s.s.s.s.=.m s.s.s.s.s.g.n.n.f.s.=.8 PX0XN 8XDXAXVXNXvXxXzXhXgX|.e Z.A.UX",
-"UXUXUXUXUXUXUXUXX 5 ^ ^ i.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.w PXKXiXV Q.VXNXvXxXzXhXgXJ.9 K.;XA.UX",
-"UXUXUXUXUXUXUXUX+ X Q / / _ d.f.f.f.f.f.f.f.f.f.f.f.f.f.f.w LXHXDXuXH V.vXvXzXhXaXe.t T.:X<Xy.UX",
-"UXUXUXUXUXUXUXUXUXO X Q / / ` a.g.g.g.g.g.g.g.g.g.g.g.g.f.w HXDXAXVXuXY T fXhX:XA A |.>X<X<Xe.UX",
-"UXUXUXUXUXUXUXUXUXUX+ X W ' ' ` j.g.g.g.g.g.g.g.g.g.g.g.f.e DXSXVXBXMXyXB.Z  Xg r.+X<X<X<X<Xt.UX",
-"UXUXUXUXUXUXUXUXUXUXUX+ X 5 ' ' ' S.j.n.n.n.n.n.n.n.n.n.d.f SXAXBXMXvXzXpXC.t K.$X<X<X<X<X<XU UX",
-"UXUXUXUXUXUXUXUXUXUXUXUX+ X O Q ] ] ] S.k.n.n.n.n.n.n.n.h.N AXBXMXvXzXhXgX;X X:X<X<X<X<X<X<XL UX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUX+ X + Q ] ] ] G.k.n.n.n.n.n.h.V BXMXvXzXhXgX<X<X<X<X<X<X<X<X<X<XD UX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ X X < Q ' [ { G.J.k.n.a.f oX#X%X&X;X>X<X<X<X<X<X<X<X<X<X<XF UX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ + X X . X O + O # = $ > > ; 8 7 & & & 7 8 e g Z G U e.9 UX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ + + + + + + + UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
-"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX"
-};
deleted file mode 100755
index 73b25052b7b5988ecc35551206199957255789b6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 35f2cd5b9aa9732841571204fc15ed4a4f1fe344..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index a1740b26cf9f1db274b65efacb25dc5e47131c12..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7fbaa640c6e7d06647f2f665f415c516b30d2bf3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2c882095562c025edf6b2db2de264f586fea16cf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 03352038cfaf2532ee6cc997680807a3abcd5d5b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/build.mk
+++ /dev/null
@@ -1,126 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-ifndef COMM_BUILD
-
-ifndef MOZILLA_DIR
-MOZILLA_DIR = $(moztopsrcdir)
-endif
-# included to get $(BUILDID), which needs $(MOZILLA_DIR)
-include $(moztopsrcdir)/toolkit/mozapps/installer/package-name.mk
-
-BUILD_YEAR = $(shell echo $(BUILDID) | cut -c 1-4)
-BUILD_MONTH = $(shell echo $(BUILDID) | cut -c 5-6)
-BUILD_DAY = $(shell echo $(BUILDID) | cut -c 7-8)
-BUILD_HOUR = $(shell echo $(BUILDID) | cut -c 9-10)
-
-ifndef PKG_SUFFIX
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-PKG_SUFFIX = .dmg
-else
-ifeq ($(OS_ARCH),WINNT)
-PKG_SUFFIX = .zip
-else
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-PKG_SUFFIX = .tar.bz2
-else
-PKG_SUFFIX = .tar.gz
-endif
-endif
-endif
-endif # PKG_SUFFIX
-PACKAGE = $(PKG_BASENAME)$(PKG_SUFFIX)
-ifeq ($(OS_TARGET), WINNT)
-INSTALLER_PACKAGE = $(PKG_INST_BASENAME).exe
-endif
-
-PREVIOUS_MAR_DIR := $(DIST)/$(PKG_UPDATE_PATH)previous
-MAR_FILE_DEST = $(PREVIOUS_MAR_DIR)/$(buildid)/$(notdir $(MAR_FILE_SRC))
-PATCH_FILE := $(DIST)/$(PKG_UPDATE_PATH)patch_list
-FORCE_UPDATE := components/components.list|Contents/MacOS/components/components.list
-
-#Example of environment variables to set before using make distribution:
-
-#Convenience variables:
-# SSH_SERVER=ftp.instantbird.org
-# SSH_USERNAME=buildbot
-# UPLOAD_PATH=/www/anonymous/nightly/$(BUILD_YEAR)/$(BUILD_MONTH)/$(BUILD_YEAR)-$(BUILD_MONTH)-$(BUILD_DAY)-$(BUILD_HOUR)-$(MOZ_APP_NAME)
-
-#Required to upload files:
-# UPLOAD_CMD=scp $(UPLOAD_FILES) $(SSH_USERNAME)@$(SSH_SERVER):$(UPLOAD_PATH)/
-#  The UPLOAD_FILES variable is set by the build system to the (space separated)
-#  list of local files that should be uploaded.
-#Optional:
-# PRE_UPLOAD_CMD=ssh $(SSH_USERNAME)@$(SSH_SERVER) mkdir -p $(UPLOAD_PATH)
-# POST_UPLOAD_CMD=ssh $(SSH_USERNAME)@$(SSH_SERVER) register_builds.php $(UPLOAD_PATH) $(MOZ_PKG_PLATFORM)
-
-# LIST_PREVIOUS_MAR_CMD=ssh $(SSH_USERNAME)@$(SSH_SERVER) previous_builds.php $(MOZ_PKG_PLATFORM)
-#  This command should return a list of mar files.
-#  Each line should use this format: <buildid>:<lang>:<path>/<filename>.mar
-# DOWNLOAD_MAR_CMD=scp $(SSH_USERNAME)@$(SSH_SERVER):/www/anonymous/$(MAR_FILE_SRC) $(MAR_FILE_DEST)
-#  The MAR_FILE_SRC variable is set by the build system to a value returned by
-#  the LIST_PREVIOUS_MAR_CMD command (format: <path>/<filename>.mar).
-#  The MAR_FILE_DEST variable is set by the build system and indicates where
-#  the file should be put on the local system.
-
-#If there's a symbol server:
-# SYMBOL_SERVER_HOST=symbols.instantbird.org
-# SYMBOL_SERVER_PATH=/www/instantbird/socorro/symbols
-# SYMBOL_SERVER_PORT=22
-# SYMBOL_SERVER_USER=buildbot
-
-distribution:
-	@$(MAKE) MAKE_SYM_STORE_PATH=$(MAKE_SYM_STORE_PATH) SYM_STORE_SOURCE_DIRS='$(moztopsrcdir)/extensions/purple $(moztopsrcdir) $(commtopsrcdir)' buildsymbols
-	@$(MAKE) -C im/installer libs installer
-ifdef ENABLE_TESTS
-	$(MAKE) xpcshell-tests
-endif
-	$(MAKE) -C tools/update-packaging complete-patch PKG_INST_PATH=
-ifdef L10NBASEDIR
-	$(foreach locale,$(SHIPPED_LOCALES),$(MAKE) -C im/locales/ repack-$(locale) LOCALE_MERGEDIR=mergedir MOZ_MAKE_COMPLETE_MAR=1 ;)
-endif
-ifdef LIST_PREVIOUS_MAR_CMD
-	rm -rf $(PREVIOUS_MAR_DIR) $(PATCH_FILE)
-	mkdir $(PREVIOUS_MAR_DIR)
-	touch $(PATCH_FILE)
-	$(foreach marline,$(shell $(LIST_PREVIOUS_MAR_CMD)),\
-	  $(foreach MAR_FILE_SRC,$(shell echo $(marline) |cut -d : -f 3),\
-	    $(foreach AB_CD,$(filter $(shell echo $(marline) |cut -d : -f 2),$(AB_CD) $(SHIPPED_LOCALES)),\
-	      $(foreach buildid,$(shell echo $(marline) |cut -d : -f 1),\
-		mkdir -p $(PREVIOUS_MAR_DIR)/$(buildid) ; \
-	        $(DOWNLOAD_MAR_CMD) ; \
-		echo "$(MAR_FILE_DEST),$(DIST)/$(COMPLETE_MAR),$(DIST)/$(PKG_UPDATE_PATH)$(PKG_UPDATE_BASENAME).partial.from-$(buildid).mar,$(FORCE_UPDATE)" >> $(PATCH_FILE) ;))))
-	PATH="$(realpath $(DIST)/host/bin):$(PATH)" $(PYTHON) $(moztopsrcdir)/tools/update-packaging/make_incremental_updates.py -f $(PATCH_FILE)
-endif
-ifdef SYMBOL_SERVER_HOST
-	@$(MAKE) uploadsymbols
-endif
-ifdef UPLOAD_CMD
-	$(MAKE) upload
-endif
-
-installer:
-	@$(MAKE) -C im/installer installer
-
-SHIPPED_LOCALES_FILE = $(commtopsrcdir)/im/locales/shipped-locales
-SHIPPED_LOCALES := $(shell if test -f $(SHIPPED_LOCALES_FILE); then cat $(SHIPPED_LOCALES_FILE); fi)
-
-package:
-	@$(MAKE) -C im/installer
-
-install::
-	@$(MAKE) -C im/installer install
-
-upload:
-ifdef UPLOAD_CMD
-	$(PRE_UPLOAD_CMD)
-	$(UPLOAD_CMD)
-	$(POST_UPLOAD_CMD)
-endif
-
-ib::
-	@$(MAKE) -C chat export libs
-	@$(MAKE) -C im libs
-
-endif # COMM_BUILD
deleted file mode 100644
--- a/im/components/contentHandler.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-// defined in nsIContentHandler.idl.
-var NS_ERROR_WONT_HANDLE_CONTENT = 0x805d0001;
-
-function contentHandler() {
-}
-contentHandler.prototype = {
-  classID: Components.ID("{fda46332-1b03-4940-a30c-0997445d8e34}"),
-
-  _xpcom_factory: {
-    createInstance: function ch_factory_ci(outer, iid) {
-      if (outer)
-        throw Cr.NS_ERROR_NO_AGGREGATION;
-      return gContentHandler.QueryInterface(iid);
-    }
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentHandler]),
-
-  // nsIContentHandler
-
-  handleContent: function ch_HandleContent(aContentType, aWindowContext,
-                                            aRequest) {
-    try {
-      if (!Cc["@mozilla.org/webnavigation-info;1"]
-             .getService(Ci.nsIWebNavigationInfo)
-             .isTypeSupported(aContentType, null))
-        throw NS_ERROR_WONT_HANDLE_CONTENT;
-    }
-    catch (e) {
-      throw NS_ERROR_WONT_HANDLE_CONTENT;
-    }
-
-    aRequest.QueryInterface(Ci.nsIChannel);
-
-    // Even though they are exposed (for OAuth dialogs), http and https
-    // requests should be redirected to the external browser.
-    if (!aRequest.URI.schemeIs("http") && !aRequest.URI.schemeIs("https"))
-      throw NS_ERROR_WONT_HANDLE_CONTENT;
-
-    Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-      .getService(Ci.nsIExternalProtocolService)
-      .loadURI(aRequest.URI);
-    aRequest.cancel(Cr.NS_BINDING_ABORTED);
-  },
-
-  // nsIFactory
-  createInstance: function ch_CI(outer, iid) {
-    if (outer != null)
-      throw Cr.NS_ERROR_NO_AGGREGATION;
-
-    return this.QueryInterface(iid);
-  },
-
-  lockFactory: function ch_lock(lock) {
-    // No-op.
-  }
-};
-var gContentHandler = new contentHandler();
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([contentHandler]);
deleted file mode 100644
--- a/im/components/contentHandler.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-component {fda46332-1b03-4940-a30c-0997445d8e34} contentHandler.js
-contract @mozilla.org/uriloader/content-handler;1?type=text/html {fda46332-1b03-4940-a30c-0997445d8e34}
-contract @mozilla.org/uriloader/content-handler;1?type=text/plain {fda46332-1b03-4940-a30c-0997445d8e34}
deleted file mode 100644
--- a/im/components/devtools/content/webconsole-overlay.xul
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-
-<overlay id="instantbird-webconsole-overlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <window id="devtools-webconsole" browserConsoleTitle="&errorConsoleCmd.label;">
-    <!--  Workaround since devtools hardcodes navigator:browser, which makes
-          browserWindow null, which means it falls back to using the
-          webconsole.xul window to look for gViewSourceUtils. -->
-    <script type="application/javascript" src="chrome://global/content/viewSourceUtils.js"/>
-    <script type="application/javascript"><![CDATA[
-        var {classes: Cc, interfaces: Ci} = Components;
-        function openUILinkIn(url) {
-            var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
-            Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-              .getService(Ci.nsIExternalProtocolService)
-              .loadURI(ios.newURI(url), window);
-        }
-    ]]></script>
-  </window>
-</overlay>
deleted file mode 100644
--- a/im/components/devtools/jar.mn
+++ /dev/null
@@ -1,7 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-instantbird.jar:
-% overlay chrome://devtools/content/webconsole/webconsole.xul chrome://instantbird/content/devtools/webconsole-overlay.xul
-  content/instantbird/devtools/webconsole-overlay.xul        (content/webconsole-overlay.xul)
deleted file mode 100644
--- a/im/components/devtools/moz.build
+++ /dev/null
@@ -1,6 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
deleted file mode 100644
--- a/im/components/ibCommandLineHandler.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/imXPCOMUtils.jsm");
-ChromeUtils.import("resource:///modules/ibCore.jsm");
-
-function ibCommandLineHandler() { }
-
-ibCommandLineHandler.prototype = {
-  handle: function clh_handle(cmdLine) {
-    if (cmdLine.handleFlag("preferences", false)) {
-      Core.showPreferences();
-      cmdLine.preventDefault = true;
-      return;
-    }
-
-    if (cmdLine.handleFlag("n", false)) {
-      Services.accounts.autoLoginStatus =
-        Ci.imIAccountsService.AUTOLOGIN_USER_DISABLED;
-    }
-
-    // Initialize the core only at the first real startup,
-    // not when clicking the dock.
-    if (cmdLine.state == cmdLine.STATE_INITIAL_LAUNCH) {
-      // If the core failed to init, don't show the buddy list
-      if (!Core.init())
-        cmdLine.preventDefault = true;
-#ifdef XP_MACOSX
-      else {
-        // If we have no reason to show the account manager and the
-        // buddy list is not shown because of the -silent flag, we
-        // should avoid an early exit.
-        // The code in nsAppStartup::Run won't start the event loop if
-        // we don't have at least one window or one call to
-        // enterLastWindowClosingSurvivalArea.
-        let as = Cc["@mozilla.org/toolkit/app-startup;1"]
-                   .getService(Ci.nsIAppStartup);
-        as.enterLastWindowClosingSurvivalArea();
-        // We can exitLastWindowClosingSurvivalArea as soon as the
-        // load of our application provided hiddenWindow has begun.
-        executeSoon(function() { as.exitLastWindowClosingSurvivalArea(); });
-      }
-#endif
-    }
-  },
-
-  // 3 tabs here because there is a misalignment with only 2
-  helpInfo: "  -n                 Disables auto-login.\n" +
-            "  -preferences       Open only the preferences window.\n" +
-            "  -silent            Do not open the contacts list.\n",
-
-  classDescription: "Instantbird Command Line Handler",
-  classID: Components.ID("{cd6763b7-df9a-4b64-9d06-2b77c755d9c1}"),
-  contractID: "@instantbird.org/command-line-handler;1",
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler])
-};
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([ibCommandLineHandler]);
deleted file mode 100644
--- a/im/components/ibCommandLineHandler.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-component {cd6763b7-df9a-4b64-9d06-2b77c755d9c1} ibCommandLineHandler.js
-contract @instantbird.org/command-line-handler;1 {cd6763b7-df9a-4b64-9d06-2b77c755d9c1}
-category command-line-handler b-n @instantbird.org/command-line-handler;1
deleted file mode 100644
--- a/im/components/ibConvStatsService.js
+++ /dev/null
@@ -1,787 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
-ChromeUtils.import("resource:///modules/imXPCOMUtils.jsm");
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource://gre/modules/Task.jsm")
-ChromeUtils.import("resource://gre/modules/osfile.jsm");
-
-var kNotificationsToObserve =
-  ["contact-added", "contact-removed","contact-status-changed",
-   "contact-display-name-changed", "contact-no-longer-dummy",
-   "contact-preferred-buddy-changed", "contact-moved",
-   "account-connected", "account-disconnected", "new-conversation",
-   "new-text", "conversation-closed", "prpl-quit"];
-
-// This is incremented when changes to the log sweeping code warrant rebuilding
-// the stats cache file.
-var gStatsCacheVersion = 2;
-
-XPCOMUtils.defineLazyGetter(this, "_newtab", () =>
-  l10nHelper("chrome://instantbird/locale/newtab.properties")
-);
-
-XPCOMUtils.defineLazyGetter(this, "_instantbird", () =>
-  l10nHelper("chrome://instantbird/locale/instantbird.properties")
-);
-
-// ConversationStats stored by id.
-// A PossibleConversation's id is its protocol, account, and name joined by "/", suffixed
-// with ".chat" for MUCs (identical to the log folder path for the conversation).
-var gStatsByConvId = {};
-
-// The message counts of a contact are the sums of the message counts of the
-// linked buddies.
-// This object serves as a cache for the total stats of contacts.
-// Initialized when gStatsByConvId is ready (i.e. all log files have been parsed
-// or it was loaded from the JSON cache file).
-var gStatsByContactId;
-
-// Recursively sweeps log folders and parses log files for conversation statistics.
-var gLogParser = {
-  _statsService: null,
-  _accountMap: null,
-  inProgress: false,
-  error: false,
-
-  // The general path of a log is logs/prpl/account/conv/date.json.
-  // First, sweep the logs folder for prpl folders.
-  sweep: function(aStatsService) {
-    initLogModule("stats-service-log-sweeper", this);
-    this.inProgress = true;
-    delete this.error;
-    this._accounts = [];
-    this._logFolders = [];
-    this._statsService = aStatsService;
-    this._statsService._notifyObservers("log-sweeping", "ongoing");
-
-    this._accountMap = new Map();
-    let accounts = Services.accounts.getAccounts();
-    while (accounts.hasMoreElements()) {
-      let account = accounts.getNext();
-      this._accountMap.set(account.normalizedName, account);
-    }
-
-    let decoder = new TextDecoder();
-
-    Services.logs.forEach(aLog => {
-      return OS.File.read(aLog).then(
-        aArray => {
-          // Try to parse the log file. If anything goes wrong here, the log file
-          // has likely been tampered with so we ignore it.
-          try {
-            let lines = decoder.decode(aArray).split("\n");
-            // The first line is the header which identifies the conversation.
-            let header = JSON.parse(lines.shift());
-            let accountName = header.account;
-            let name = header.normalizedName;
-            if (!name) {
-              // normalizedName was added for IB 1.5, so we normalize
-              // manually if it is not found for backwards compatibility.
-              name = header.name;
-              let account = this._accountMap.get(accountName);
-              if (account)
-                name = account.normalize(name);
-            }
-            let id = getConversationId(header.protocol, accountName,
-                                       name, header.isChat);
-            if (!(id in gStatsByConvId))
-              gStatsByConvId[id] = new ConversationStats(id);
-            let stats = gStatsByConvId[id];
-            lines.pop(); // Ignore the final line break.
-            for (let line of lines) {
-              line = JSON.parse(line);
-              if (line.flags[0] == "system") // Ignore system messages.
-                continue;
-              line.flags[0] == "incoming" ?
-                ++stats.incomingCount : ++stats.outgoingCount;
-            }
-            let date = Date.parse(header.date);
-            if (date > stats.lastDate)
-              stats.lastDate = date;
-            delete stats._computedScore;
-          }
-          catch(e) {
-            this.WARN("Error parsing log file: " + aLog + "\n" + e);
-          }
-        },
-        aError => {
-          Cu.reportError("Error reading log file: " + aLog + "\n" + aError);
-          this.error = true;
-        }
-      );
-    }).catch(aError => {
-      this.error = true;
-    }).then(() => {
-      delete this.inProgress;
-      delete this._accountMap;
-      let statsService = this._statsService;
-      statsService._cacheAllStats(); // Flush stats to JSON cache.
-      statsService._convs.sort(statsService._sortComparator);
-      statsService._notifyObservers("log-sweeping", "done");
-      gStatsByContactId = {}; // Initialize stats cache for contacts.
-    });
-  },
-};
-
-function ConvStatsService() {
-  this._observers = [];
-}
-ConvStatsService.prototype = {
-  // Sorted list of conversations, stored as PossibleConversations.
-  _convs: [],
-  // PossibleConvFromContacts stored by id.
-  _contactsById: new Map(),
-  // Keys are account ids. Values are Maps of chat names to PossibleChats.
-  _chatsByAccountIdAndName: new Map(),
-  // Timer to update the stats cache.
-  // The cache is updated every 10 minutes, and on quitting.
-  _statsCacheUpdateTimer: null,
-  _statsCacheFilePath: null,
-
-  _init: function() {
-    let contacts = Services.contacts.getContacts();
-    for (let contact of contacts)
-      this._addContact(contact);
-    for (let notification of kNotificationsToObserve)
-      Services.obs.addObserver(this, notification);
-
-    // Read all our conversation stats from the cache.
-    this._statsCacheFilePath =
-      OS.Path.join(OS.Constants.Path.profileDir, "statsservicecache.json");
-    OS.File.read(this._statsCacheFilePath).then((aArray) => {
-      try {
-        let {version: version, stats: allStats} =
-          JSON.parse((new TextDecoder()).decode(aArray));
-        if (version !== gStatsCacheVersion) {
-          gLogParser.sweep(this);
-          return;
-        }
-        for (let key in allStats) {
-          let stats = allStats[key];
-          gStatsByConvId[stats.id] =
-            new ConversationStats(stats.id, stats.lastDate,
-                                  stats.incomingCount, stats.outgoingCount);
-        }
-        gStatsByContactId = {};
-      }
-      catch (e) {
-        // Something unexpected was encountered in the file.
-        // (Maybe it was tampered with?) Rebuild the cache from logs.
-        Cu.reportError("Error while parsing conversation stats cache.\n" + e);
-        if (Services.prefs.getBoolPref("statsService.parseLogsForStats"))
-          gLogParser.sweep(this);
-      }
-    }, (aError) => {
-      if (!aError.becauseNoSuchFile)
-        Cu.reportError("Error while reading conversation stats cache.\n" + aError);
-      if (Services.prefs.getBoolPref("statsService.parseLogsForStats"))
-        gLogParser.sweep(this);
-    });
-  },
-
-  _addContact: function(aContact) {
-    if (this._contactsById.has(aContact.id)) // Already added.
-      return;
-    let possibleConv = new PossibleConvFromContact(aContact);
-    let pos = this._getPositionToInsert(possibleConv, this._convs);
-    this._convs.splice(pos, 0, possibleConv);
-    this._contactsById.set(aContact.id, possibleConv);
-  },
-
-  _removeContact: function(aId) {
-    if (!this._contactsById.has(aId))
-      return;
-    this._convs.splice(
-      this._convs.indexOf(this._contactsById.get(aId)), 1);
-    this._contactsById.delete(aId);
-  },
-
-  // The last time an update notification was sent to observers.
-  _lastUpdateNotification: 0,
-  // Account ids from which chat room info has been requested.
-  // We send an update notification if this is empty after adding chat rooms.
-  _accountsRequestingRoomInfo: new Set(),
-  _addPendingChats: function(aAccountId, aRoomInfo) {
-    if (this._pendingChats) {
-      this._pendingChats.push([aAccountId, aRoomInfo]);
-      return;
-    }
-
-    this._pendingChats = [[aAccountId, aRoomInfo]];
-    Task.spawn(function*() {
-      let t = Date.now();
-      let sendUpdateNotification = () => {
-        if ((!this._accountsRequestingRoomInfo.size &&
-             !this._pendingChats.length) ||
-            t - this._lastUpdateNotification > 500) {
-          this._notifyObservers("updated");
-          this._lastUpdateNotification = t;
-        }
-      };
-
-      while (this._pendingChats.length) {
-        let [accountId, rooms] = this._pendingChats.pop();
-
-        let chatList = this._chatsByAccountIdAndName.get(accountId);
-        if (!chatList) // Account no longer connected.
-          continue;
-
-        for (let name of rooms) {
-          // If a chat is already added, we remove it and re-add to refresh.
-          if (chatList.has(name))
-            this._convs.splice(this._convs.indexOf(chatList.get(name)), 1);
-          let possibleConv = new PossibleChat(accountId, name);
-          let pos = this._getPositionToInsert(possibleConv, this._convs);
-          this._convs.splice(pos, 0, possibleConv);
-          chatList.set(name, possibleConv);
-
-          // Unblock every 10ms.
-          if (Date.now() > t + 10) {
-            yield Promise.resolve();
-            t = Date.now();
-            sendUpdateNotification();
-            if (!this._chatsByAccountIdAndName.has(accountId)) {
-              // The account was disconnected in the meantime, so don't add
-              // any more chats to it.
-              break;
-            }
-          }
-        }
-      }
-      t = Date.now();
-      sendUpdateNotification();
-      delete this._pendingChats;
-    }.bind(this));
-  },
-
-  _removeChatsForAccount: function(aAccId) {
-    if (!this._chatsByAccountIdAndName.has(aAccId))
-      return;
-    // Keep only convs that either aren't chats or have a different account id.
-    this._convs = this._convs.filter(c =>
-      c.source != "chat" || c.accountId != aAccId);
-    this._chatsByAccountIdAndName.delete(aAccId);
-  },
-
-  _getPositionToInsert: function(aPossibleConversation, aArrayToInsert) {
-    let end = aArrayToInsert.length;
-    // Avoid the binary search loop if aArrayToInsert was already sorted.
-    if (end == 0 ||
-        this._sortComparator(aPossibleConversation, aArrayToInsert[end - 1]) >= 0)
-      return end;
-    let start = 0;
-    while (start < end) {
-      let middle = Math.floor((start + end) / 2);
-      if (this._sortComparator(aPossibleConversation, aArrayToInsert[middle]) < 0)
-        end = middle;
-      else
-        start = middle + 1;
-    }
-    return end;
-  },
-
-  _sortComparator: function(aPossibleConvA, aPossibleConvB) {
-    let scoreA = aPossibleConvA.computedScore;
-    let scoreB = aPossibleConvB.computedScore;
-    // We want conversations with stats (both contacts and chats) to appear first,
-    // followed by contacts with no stats, and finally chats with no stats.
-    // Conversations with stats have a positive score.
-    // Contacts with no stats get a 0, and chats get -1.
-    let sign = x => x > 0 ? 1 : x < 0 ? -1 : 0;
-    return sign(scoreB) - sign(scoreA) ||
-      scoreB - scoreA ||
-      aPossibleConvB.statusType - aPossibleConvA.statusType ||
-      aPossibleConvA.lowerCaseName.localeCompare(aPossibleConvB.lowerCaseName);
-  },
-
-  _repositionConvsWithUpdatedStats: function() {
-    for (let conv of this._convsWithUpdatedStats) {
-      let currentPos = this._convs.indexOf(conv);
-      // If the conv is no longer in the list (perhaps the contact was removed),
-      // don't try to reposition it.
-      if (currentPos == -1)
-        continue;
-      this._convs.splice(currentPos, 1);
-      let newPos = this._getPositionToInsert(conv, this._convs);
-      this._convs.splice(newPos, 0, conv);
-    }
-    this._convsWithUpdatedStats.clear();
-  },
-
-  getFilteredConvs: function(aFilterStr) {
-    this._repositionConvsWithUpdatedStats();
-
-    // Duplicate this._convs to avoid modifying it while adding existing convs.
-    let filteredConvs = this._convs.slice(0);
-    let existingConvs = Services.conversations.getUIConversations().map(
-                          uiConv => new ExistingConversation(uiConv));
-    for (let existingConv of existingConvs) {
-      let uiConv = existingConv.uiConv;
-      if (existingConv.isChat) {
-        let chatList = this._chatsByAccountIdAndName.get(uiConv.account.id);
-        if (chatList) {
-          let chat = chatList.get(uiConv.name);
-          if (chat)
-            filteredConvs.splice(filteredConvs.indexOf(chat), 1);
-        }
-      }
-      else {
-        let contact = uiConv.contact;
-        if (contact && this._contactsById.has(contact.id)) {
-          filteredConvs.splice(
-            filteredConvs.indexOf(this._contactsById.get(contact.id)), 1);
-        }
-      }
-      let pos = this._getPositionToInsert(existingConv, filteredConvs);
-      filteredConvs.splice(pos, 0, existingConv);
-    }
-    if (aFilterStr) {
-      let searchWords = aFilterStr.toLowerCase().split(/\s+/);
-      filteredConvs = filteredConvs.filter(function(c) {
-        let words = c.lowerCaseName.split(/\s+/);
-        return searchWords.every(function(s) {
-          return words.some(function(word) {
-            if (word.startsWith(s))
-              return true;
-            // Ignore channel prefix characters.
-            while (word.length && "#&+!@_*".includes(word[0])) {
-              word = word.substr(1);
-              if (word.startsWith(s))
-                return true;
-            }
-            return false;
-          });
-        });
-      });
-    }
-    return new nsSimpleEnumerator(filteredConvs);
-  },
-
-  _cacheAllStats: function() {
-    // Don't save anything to the JSON file until log sweeping is done. This is to
-    // ensure that a re-sweep is triggered on next startup if log sweeping could
-    // not complete.
-    if (gLogParser.inProgress)
-      return;
-    // Don't cache anything if we encountered an error during log sweeping, so
-    // a fresh log sweep is triggered on next startup.
-    if (gLogParser.error)
-      return;
-    // Don't save stats to disk if the user has disabled conversation logging.
-    if (!Services.prefs.getBoolPref("purple.logging.log_ims"))
-      return;
-    let encoder = new TextEncoder();
-    let objToWrite = {version: gStatsCacheVersion, stats: gStatsByConvId};
-    OS.File.writeAtomic(this._statsCacheFilePath,
-                        encoder.encode(JSON.stringify(objToWrite)),
-                        {tmpPath: this._statsCacheFilePath + ".tmp"});
-    if (this._statsCacheUpdateTimer) {
-      clearTimeout(this._statsCacheUpdateTimer);
-      delete this._statsCacheUpdateTimer;
-    }
-  },
-
-  _requestRoomInfo: function() {
-    let accounts = Services.accounts.getAccounts();
-    while (accounts.hasMoreElements()) {
-      let acc = accounts.getNext();
-      let id = acc.id;
-      if (acc.connected && acc.canJoinChat && (!this._chatsByAccountIdAndName.has(id) ||
-          acc.prplAccount.isRoomInfoStale)) {
-        // Discard any chat room data we already have.
-        this._removeChatsForAccount(id);
-        try {
-          this._chatsByAccountIdAndName.set(id, new Map());
-          acc.prplAccount.requestRoomInfo((aRoomInfo, aCompleted) => {
-            if (aCompleted)
-              this._accountsRequestingRoomInfo.delete(id);
-            this._addPendingChats(id, aRoomInfo);
-          });
-          this._accountsRequestingRoomInfo.add(id);
-        } catch(e) {
-          if (e.result == Cr.NS_ERROR_NOT_IMPLEMENTED)
-            this._chatsByAccountIdAndName.delete(id);
-          else
-            Cu.reportError(e);
-          continue;
-        }
-      }
-    }
-  },
-
-  addObserver: function(aObserver) {
-    if (this._observers.includes(aObserver))
-      return;
-    this._observers.push(aObserver);
-
-    if (gLogParser.inProgress)
-      aObserver.observe(this, "stats-service-log-sweeping", "ongoing");
-
-    this._repositionConvsWithUpdatedStats();
-
-    // We request chat lists from accounts when adding new observers.
-    this._requestRoomInfo();
-  },
-
-  removeObserver: function(aObserver) {
-    this._observers = this._observers.filter(o => o !== aObserver);
-  },
-
-  _notifyObservers: function(aTopic, aData) {
-    for (let observer of this._observers) {
-      if ("observe" in observer) // Avoid failing on destructed XBL bindings.
-        observer.observe(this, "stats-service-" + aTopic, aData);
-    }
-  },
-
-  // Maps prplConversation ids to their ConversationStats objects.
-  _statsByPrplConvId: new Map(),
-  // Maps prplConversation ids to the corresponding PossibleConversations.
-  _convsByPrplConvId: new Map(),
-  // These will be repositioned to reflect their new scores when a newtab is opened.
-  _convsWithUpdatedStats: new Set(),
-  observe: function(aSubject, aTopic, aData) {
-    if (aTopic == "profile-after-change")
-      Services.obs.addObserver(this, "prpl-init");
-    else if (aTopic == "prpl-init") {
-      executeSoon(() => this._init());
-      Services.obs.removeObserver(this, "prpl-init");
-    }
-    else if (aTopic == "prpl-quit") {
-      // Update the stats cache only if there was already an update scheduled.
-      if (this._statsCacheUpdateTimer)
-        this._cacheAllStats();
-    }
-    else if (aTopic == "new-text") {
-      if (aSubject.system) // We don't care about system messages.
-        return;
-
-      let conv = aSubject.conversation;
-      let stats = this._statsByPrplConvId.get(conv.id);
-      aSubject.outgoing ? ++stats.outgoingCount : ++stats.incomingCount;
-      stats.lastDate = Date.now();
-      // Ensure the score is recomputed next time it's used.
-      delete stats._computedScore;
-
-      let possibleConv = this._convsByPrplConvId.get(conv.id);
-      if (possibleConv) {
-        if (possibleConv.source == "contact" && gStatsByContactId)
-          delete gStatsByContactId[possibleConv._contactId];
-        this._convsWithUpdatedStats.add(possibleConv);
-      }
-
-      // Schedule a cache update in 10 minutes.
-      if (!this._statsCacheUpdateTimer) {
-        this._statsCacheUpdateTimer =
-          setTimeout(() => this._cacheAllStats(), 600000);
-      }
-    }
-    else if (aTopic == "new-conversation") {
-      let conv = aSubject;
-      let id = getConversationId(conv.account.protocol.normalizedName,
-                                 conv.account.normalizedName,
-                                 conv.normalizedName, conv.isChat);
-      if (!(id in gStatsByConvId))
-        gStatsByConvId[id] = new ConversationStats(id);
-      this._statsByPrplConvId.set(conv.id, gStatsByConvId[id]);
-
-      let possibleConv = null;
-      if (conv.buddy) {
-        // First .buddy is a prplIAccountBuddy, second one is an imIBuddy.
-        let contact = conv.buddy.buddy.contact;
-        if (contact)
-          possibleConv = this._contactsById.get(contact.id);
-      }
-      else if (conv.isChat) {
-        let chatList = this._chatsByAccountIdAndName.get(conv.account.id);
-        if (chatList && chatList.has(conv.normalizedName))
-          possibleConv = chatList.get(conv.name);
-      }
-      this._convsByPrplConvId.set(conv.id, possibleConv);
-    }
-    else if (aTopic == "conversation-closed")
-      this._statsByPrplConvId.delete(aSubject.id);
-    else if (aTopic == "contact-no-longer-dummy") {
-      // Contact ID changed. aData is the old ID.
-      let id = aSubject.id;
-      let oldId = parseInt(aData, 10);
-      this._contactsById.set(id, this._contactsById.get(oldId));
-      this._contactsById.delete(oldId);
-      this._contactsById.get(id)._contactId = id;
-      return;
-    }
-    else if (aTopic == "contact-added")
-      this._addContact(aSubject);
-    else if (aTopic == "contact-removed")
-      this._removeContact(aSubject.id);
-    else if (aTopic.startsWith("contact")) {
-      // A change in the contact's status or display name may cause the
-      // order to change, so we simply remove and re-add it.
-      this._removeContact(aSubject.id);
-      this._addContact(aSubject);
-    }
-    else if (aTopic == "account-connected" &&
-             this._observers.length) {
-      // Ensure the existing newtabs have roomInfo for this account.
-      this._requestRoomInfo();
-    }
-    else if (aTopic == "account-disconnected") {
-      let id = aSubject.id;
-      this._accountsRequestingRoomInfo.delete(id);
-      this._removeChatsForAccount(id);
-    }
-    this._notifyObservers("updated");
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.ibIConvStatsService]),
-  classDescription: "ConvStatsService",
-  classID: Components.ID("{1d9be575-87a4-4f2f-b414-c67a560f29fd}"),
-  contractID: "@instantbird.org/conv-stats-service;1"
-};
-
-function getConversationId(aProtocol, aAccount, aConversation, aIsChat) {
-  // aProtocol, aAccount, aConversation must be normalizedNames.
-  let id = [aProtocol, aAccount, aConversation].join("/");
-  if (aIsChat)
-    id += ".chat";
-  return id;
-}
-
-function ConversationStats(aConvId = "", aLastDate = 0,
-                           aIncomingCount = 0, aOutgoingCount = 0) {
-  this.id = aConvId;
-  this.lastDate = aLastDate;
-  this.incomingCount = aIncomingCount;
-  this.outgoingCount = aOutgoingCount;
-}
-ConversationStats.prototype = {
-  id: "",
-  lastDate: 0,
-  ONE_DAY: 24 * 60 * 60 * 1000,
-  get daysBefore() { return (Date.now() - this.lastDate) / this.ONE_DAY; },
-  get msgCount() { return this.incomingCount + this.outgoingCount; },
-  incomingCount: 0,
-  outgoingCount: 0,
-  get frequencyMultiplier() {
-    return this.outgoingCount / (this.incomingCount || 1);
-  },
-  get recencyMultiplier() {
-    let daysBefore = this.daysBefore;
-    if (daysBefore < 4)
-      return 1;
-    if (daysBefore < 14)
-      return 0.7;
-    if (daysBefore < 31)
-      return 0.5;
-    if (daysBefore < 90)
-      return 0.3;
-    return 0.1;
-  },
-  get computedScore() {
-    return this._computedScore || (this._computedScore =
-      this.msgCount * this.frequencyMultiplier * this.recencyMultiplier);
-  },
-  mergeWith: function(aOtherStats) {
-    let stats = new ConversationStats();
-    stats.lastDate = Math.max(this.lastDate, aOtherStats.lastDate);
-    stats.incomingCount = this.incomingCount + aOtherStats.incomingCount;
-    stats.outgoingCount = this.outgoingCount + aOtherStats.outgoingCount;
-    return stats;
-  }
-}
-
-var PossibleConversation = {
-  get displayName() { return this._displayName; },
-  get lowerCaseName() {
-    return this._lowerCaseName || (this._lowerCaseName = this._displayName.toLowerCase());
-  },
-  _isChat: false, // False by default. Extensions should override this.
-  get isChat() { return this._isChat; },
-  get statusType() { return this._statusType; },
-  get statusText() { return this._statusText; },
-  get infoText() { return this._infoText; },
-  get buddyIconFilename() { return this._buddyIconFilename; },
-  QueryInterface: XPCOMUtils.generateQI([Ci.ibIPossibleConversation])
-};
-
-function PossibleConvFromContact(aContact) {
-  this._displayName = aContact.displayName;
-  this._statusType = aContact.statusType;
-  this._statusText = aContact.statusText;
-  this._contactId = aContact.id;
-}
-PossibleConvFromContact.prototype = {
-  __proto__: PossibleConversation,
-  get statusText() { return this._statusText; },
-  get source() { return "contact"; },
-  get id() {
-    let buddy = this.contact.preferredBuddy;
-    return getConversationId(buddy.protocol.normalizedName,
-                             buddy.preferredAccountBuddy.account.normalizedName,
-                             buddy.normalizedName, false);
-  },
-  get buddyIds() {
-    let buddies = this.contact.getBuddies();
-    let ids = [];
-    for (let buddy of buddies) {
-      let accountbuddies = buddy.getAccountBuddies();
-      for (let accountbuddy of accountbuddies) {
-        ids.push(getConversationId(buddy.protocol.normalizedName,
-                                   accountbuddy.account.normalizedName,
-                                   accountbuddy.normalizedName, false));
-      }
-    }
-    return ids;
-  },
-  get lowerCaseName() {
-    if (!this._lowerCaseName) {
-      let buddies = this.contact.getBuddies();
-      let names = buddies.map(b => b.displayName).join(" ");
-      this._lowerCaseName = names.toLowerCase();
-    }
-    return this._lowerCaseName;
-  },
-  get buddyIconFilename() { return this.contact.buddyIconFilename; },
-  get infoText() {
-    let tagNames = this.contact.getTags().map(aTag => aTag.name);
-    tagNames.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
-    return tagNames.join(", ");
-  },
-  get contact() { return Services.contacts.getContactById(this._contactId); },
-  get account() { return this.contact.preferredBuddy.preferredAccountBuddy.account; },
-  get computedScore() {
-    let contactId = this._contactId;
-    if (gStatsByContactId && gStatsByContactId[contactId])
-      return gStatsByContactId[contactId].computedScore;
-    // Contacts may have multiple buddies attached to them, so we sum their
-    // individual message counts before arriving at the final score.
-    let stats = new ConversationStats();
-    for (let id of this.buddyIds) {
-      let buddyStats = gStatsByConvId[id];
-      if (buddyStats)
-        stats = stats.mergeWith(buddyStats);
-    }
-    if (gStatsByContactId)
-      gStatsByContactId[contactId] = stats;
-    let score = stats.computedScore;
-    // We apply a negative bias if statusType / STATUS_AVAILABLE is less than 0.5
-    // (i.e. our status is less than or equal to STATUS_MOBILE), and a positive
-    // one otherwise.
-    score *= 0.5 + this.statusType / Ci.imIStatusInfo.STATUS_AVAILABLE;
-    if (!this.contact.canSendMessage)
-      score *= 0.75;
-    return score;
-  },
-  createConversation: function() { return this.contact.createConversation(); }
-};
-
-function PossibleChat(aAccountId, aName) {
-  this.displayName = aName;
-  this.accountId = aAccountId;
-  let account = this.account;
-  this.id = getConversationId(account.protocol.normalizedName,
-                              account.normalizedName,
-                              account.normalize(aName), true);
-}
-PossibleChat.prototype = {
-  get isChat() { return true; },
-  get statusType() { return Ci.imIStatusInfo.STATUS_AVAILABLE; },
-  get buddyIconFilename() { return ""; },
-  get lowerCaseName() {
-    return this._lowerCaseName || (this._lowerCaseName = this.displayName.toLowerCase());
-  },
-  get statusText() {
-    let roomInfo = this.account.prplAccount.getRoomInfo(this.displayName);
-    let text = "";
-    if (roomInfo.participantCount != Ci.prplIRoomInfo.NO_PARTICIPANT_COUNT)
-      text += "(" + roomInfo.participantCount + ") ";
-    if (roomInfo.topic)
-      text += roomInfo.topic;
-    return text;
-  },
-  get infoText() { return this.account.normalizedName; },
-  get source() { return "chat"; },
-  get account() { return Services.accounts.getAccountById(this.accountId); },
-  createConversation: function() {
-    let account = this.account;
-    account.joinChat(account.prplAccount.getRoomInfo(this.displayName)
-                                        .chatRoomFieldValues);
-    // Work around the fact that joinChat doesn't return the conv.
-    return Services.conversations
-                   .getConversationByNameAndAccount(this.displayName,
-                                                    account, true);
-  },
-  get computedScore() {
-    let stats = gStatsByConvId[this.id];
-    if (stats && stats.computedScore)
-      return stats.computedScore;
-    // Force chats without a score to the end of the list.
-    return -1;
-  },
-  QueryInterface: XPCOMUtils.generateQI([Ci.ibIPossibleConversation])
-};
-
-function ExistingConversation(aUIConv) {
-  this._convId = aUIConv.target.id;
-  let account = aUIConv.account;
-  this.id = getConversationId(account.protocol.normalizedName,
-                              account.normalizedName,
-                              aUIConv.normalizedName,
-                              aUIConv.isChat);
-  this._displayName = aUIConv.title;
-  this._isChat = aUIConv.isChat;
-  if (aUIConv.isChat) {
-    this._statusText = aUIConv.topic;
-    this._statusType = PossibleChat.prototype.statusType;
-    this._buddyIconFilename = "";
-  }
-  else {
-    let buddy = aUIConv.buddy;
-    if (buddy) {
-      this._statusType = buddy.statusType;
-      this._statusText = buddy.statusText;
-      this._buddyIconFilename = buddy.buddyIconFilename;
-      this._lowerCaseName = aUIConv.contact.getBuddies()
-                                   .map(b => b.displayName)
-                                   .join(" ").toLowerCase();
-    }
-    else {
-      this._statusType = Ci.imIStatusInfo.STATUS_UNKNOWN;
-      this._statusText = "";
-      this._buddyIconFilename = "";
-    }
-  }
-  this._infoText = _newtab("existingConv.infoText");
-}
-ExistingConversation.prototype = {
-  __proto__: PossibleConversation,
-  get source() { return "existing"; },
-  get uiConv() {
-    return Services.conversations.getUIConversation(Services.conversations
-                   .getConversationById(this._convId));
-  },
-  get account() { return this.uiConv.account; },
-  get computedScore() {
-    let stats = gStatsByConvId[this.id];
-    if (!stats) {
-      // Force chats without a score to the end of the list.
-      return this.isChat ? -1 : 0;
-    }
-    let score = stats.computedScore;
-    // Give existing chats a negative bias. It's unlikely the user wants to
-    // reopen them.
-    if (this.isChat)
-      score *= 0.8;
-    // We don't apply the status biasing that PossibleConvFromContact does because
-    // existing conversations are not as likely to be reopened as an available
-    // contact, but are more likely to be reopened than an offline contact.
-    // Averaging this out eliminates the status bias.
-    return score;
-  },
-  createConversation: function() { return this.uiConv.target; }
-};
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([ConvStatsService]);
deleted file mode 100644
--- a/im/components/ibConvStatsService.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-component {1d9be575-87a4-4f2f-b414-c67a560f29fd} ibConvStatsService.js
-contract @instantbird.org/conv-stats-service;1 {1d9be575-87a4-4f2f-b414-c67a560f29fd}
-category profile-after-change ConvStatsService @instantbird.org/conv-stats-service;1
deleted file mode 100644
--- a/im/components/ibDockBadge.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.import("resource:///modules/imServices.jsm");
-
-XPCOMUtils.defineLazyServiceGetter(this, "MacDock",
-                                   "@mozilla.org/widget/macdocksupport;1",
-                                   "nsIMacDockSupport");
-
-function DockBadge() { }
-DockBadge.prototype = {
-  _badgeTimer: null,
-  _showDockBadgePrefName: "messenger.options.showUnreadCountInDock",
-  _getAttentionPrefName: "messenger.options.getAttentionOnNewMessages",
-  _showUnreadCount: function() {
-    MacDock.badgeText = this._unreadCount || "";
-  },
-  _displayUnreadCountInDockBadge: function() {
-    if (!Services.prefs.getBoolPref(this._showDockBadgePrefName))
-      return;
-
-    if (this._unreadCount == 1 &&
-        Services.prefs.getBoolPref(this._getAttentionPrefName)) {
-      // We use a timer because it looks better to add the dock
-      // badge only after the dock item has stopped jumping.
-      if (!this._badgeTimer)
-        this._badgeTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
-      this._badgeTimer.initWithCallback(this._showUnreadCount.bind(this),
-                                        1000, Ci.nsITimer.TYPE_ONE_SHOT);
-    }
-    else
-      this._showUnreadCount();
-  },
-  _hideUnreadCountDockBadge: function() {
-    if (this._badgeTimer)
-      this._badgeTimer.cancel();
-    MacDock.badgeText = "";
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    switch (aTopic) {
-    case "profile-after-change":
-      Services.obs.addObserver(this, "unread-im-count-changed");
-      Services.prefs.addObserver(this._showDockBadgePrefName, this);
-      break;
-    case "nsPref:changed":
-      if (aData == this._showDockBadgePrefName) {
-        if (Services.prefs.getBoolPref(aData))
-          this._showUnreadCount();
-        else
-          this._hideUnreadCountDockBadge();
-      }
-      break;
-    case "unread-im-count-changed":
-      if (!(this._unreadCount = parseInt(aData)))
-        this._hideUnreadCountDockBadge();
-      else
-        this._displayUnreadCountInDockBadge();
-      break;
-    }
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
-  classDescription: "DockBadge",
-  classID: Components.ID("{8b1eb1be-a58c-450b-8250-c6d5ad9fe2fb}"),
-  contractID: "@instantbird.org/mac/dock-badge;1"
-};
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([DockBadge]);
deleted file mode 100644
--- a/im/components/ibDockBadge.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-component {8b1eb1be-a58c-450b-8250-c6d5ad9fe2fb} ibDockBadge.js
-contract @instantbird.org/mac/dock-badge;1 {8b1eb1be-a58c-450b-8250-c6d5ad9fe2fb}
-category profile-after-change DockBadge @instantbird.org/mac/dock-badge;1
deleted file mode 100644
--- a/im/components/ibIConvStatsService.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsISimpleEnumerator.idl"
-#include "nsIObserver.idl"
-#include "imIStatusInfo.idl"
-
-interface ibIPossibleConversation;
-interface imIAccount;
-interface imIContact;
-
-[scriptable, uuid(1b495592-8512-4443-bcdb-49118f045e42)]
-interface ibIConvStatsService: nsISupports {
-  // Returns an enumerator of PossibleConversations which match the given filter string.
-  nsISimpleEnumerator getFilteredConvs(in AUTF8String aFilterStr);
-  // A stats-service-updated notification is fired when data has been updated.
-  void addObserver(in nsIObserver aObserver);
-  void removeObserver(in nsIObserver aObserver);
-};
-
-[scriptable, uuid(e7e5e7ba-203c-47ea-8174-55b5e5d8131f)]
-// Inherits from imIStatusInfo to avoid code duplication.
-interface ibIPossibleConversation: imIStatusInfo {
-  /* The source of the possible conversation. Possible values are:
-   * "contact"  - From an imIContact.
-   * "existing" - From an imIConversation.
-   */
-  readonly attribute AUTF8String source;
-  readonly attribute imIAccount account;
-  // If the possible conversation is a chat, statusText will give its topic.
-  readonly attribute boolean isChat;
-  /* Provides additional info about the conversation depending on the source:
-   * "contact"  - The contact's tags (comma separated).
-   * "existing" - Localized string existingConv.infoText (newtab.properties).
-   */
-  readonly attribute AUTF8String infoText;
-};
deleted file mode 100644
--- a/im/components/ibStatusCommandLineHandler.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {interfaces: Ci, utils: Cu} = Components;
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/imStatusUtils.jsm");
-
-function StatusCLH() { }
-StatusCLH.prototype = {
-  classDescription: "Instantbird Status Commandline Handler Component",
-  classID:          Components.ID("{9da72063-b727-488d-9b3f-cc12e854ab33}"),
-  contractID:       "@instantbird.org/status/clh;1",
-  QueryInterface:   XPCOMUtils.generateQI([Ci.nsICommandLineHandler]),
-
-  /** nsICommandLineHandler **/
-  handle: function(cmdLine) {
-    let statusIndex = cmdLine.findFlag("status", false);
-    if (statusIndex == -1 || cmdLine.length <= statusIndex + 1)
-      return;
-
-    let statusParam = cmdLine.getArgument(statusIndex + 1).toLowerCase();
-
-    // Remove the arguments since they've been handled.
-    cmdLine.removeArguments(statusIndex, statusIndex + 1);
-
-    // We're keeping the old status message here.
-    let us = Services.core.globalUserStatus;
-    us.setStatus(Status.toFlag(statusParam), us.statusText);
-
-    // Only perform the default action (i.e. loading the buddy list) if
-    // Instantbird is launched with a status flag.
-    if (cmdLine.state != Ci.nsICommandLine.STATE_INITIAL_LAUNCH)
-      cmdLine.preventDefault = true;
-  },
-
-  // Follow the guidelines in nsICommandLineHandler.idl for the help info
-  // specifically, flag descriptions should start at character 24, and lines
-  // should be wrapped at 72 characters with embedded newlines, and finally, the
-  // string should end with a newline.
-  helpInfo: "  -status <status>     Set the online status.\n" +
-            "                       <status> can be one of\n" +
-            "                       available, away, offline.\n"
-};
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([StatusCLH]);
deleted file mode 100644
--- a/im/components/ibStatusCommandLineHandler.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-component {9da72063-b727-488d-9b3f-cc12e854ab33} ibStatusCommandLineHandler.js
-contract @instantbird.org/status/clh;1 {9da72063-b727-488d-9b3f-cc12e854ab33}
-category command-line-handler m-status @instantbird.org/status/clh;1
deleted file mode 100644
--- a/im/components/mintrayr/content/mintrayr.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource:///modules/imServices.jsm");
-
-var gMinTrayR = {
-  trayService: null,
-  _prefs: null,
-  get menu() { return document.getElementById("MinTrayR_context"); },
-
-  load: function() {
-    window.addEventListener("unload",
-      () => gMinTrayR._prefs.removeObserver("alwaysShowTrayIcon", gMinTrayR),
-      {once: true});
-
-    let node = document.getElementById("menu_FileQuitItem").cloneNode(true);
-    node.setAttribute('id', 'MinTrayR_' + node.id);
-    this.menu.appendChild(node);
-
-    window.addEventListener("TrayDblClick", this, true);
-    window.addEventListener("TrayClick", this, true);
-
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-    // Workaround for Linux, where mozilla ignores persisted window position.
-    // Need to capture window move and close events.
-    window.addEventListener("deactivate", this, true);
-    // Restore window position after restart.
-    let docElt = window.document.documentElement;
-    if (docElt.hasAttribute("storeScreenX"))
-      window.moveTo(docElt.getAttribute("storeScreenX"),
-                    docElt.getAttribute("storeScreenY"));
-#endif
-#endif
-
-    this.trayService =
-      Cc['@tn123.ath.cx/trayservice;1']
-        .getService(Ci.trayITrayService);
-    this.trayService.watchMinimize(window);
-
-    this._prefs = Services.prefs.getBranch("extensions.mintrayr.")
-                                .QueryInterface(Ci.nsIPrefBranch);
-    this._prefs.addObserver("alwaysShowTrayIcon", this);
-
-    // Add a listener to minimize the window on startup once it has been
-    // fully created if the corresponding pref is set.
-    if (this._prefs.getBoolPref("startMinimized")) {
-      window.addEventListener("focus", () => {
-        if (gMinTrayR._prefs.getIntPref("minimizeon"))
-          gMinTrayR.minimize();
-        else
-          window.minimize();
-      }, {once: true});
-    }
-
-    this.reinitWindow();
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    this.reinitWindow();
-  },
-
-  reinitWindow: function() {
-    if (this._prefs.getBoolPref("alwaysShowTrayIcon") && !this._icon)
-      this._icon = this.trayService.createIcon(window);
-    else if (this._icon) {
-      this._icon.close();
-      delete this._icon;
-    }
-
-    if (!this.trayService.isWatchedWindow(window))
-      this.trayService.watchMinimize(window);
-  },
-
-  handleEvent: function(aEvent) {
-    if (aEvent.type == "TrayClick" && aEvent.button == 2) {
-      // Show the context menu, this occurs on a single right click.
-      this.menu.showPopup(document.documentElement,
-                          aEvent.screenX, aEvent.screenY,
-                          "context", "", "bottomleft");
-    }
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-    else if (aEvent.type == "deactivate") {
-      let docElt = window.document.documentElement;
-      docElt.setAttribute("storeScreenX", window.screenX);
-      docElt.setAttribute("storeScreenY", window.screenY);
-    }
-#endif
-#endif
-    else if (aEvent.button == 0 &&
-             (aEvent.type == "TrayDblClick" ||
-              this._prefs.getBoolPref("singleClickRestore"))) {
-      // Restore the buddy list, this is a single or a double left click.
-      this.toggle();
-    }
-  },
-
-  minimize: function MinTrayR_minimize() {
-    // This will also work with alwaysShow.
-    this.trayService.minimize(window, true);
-  },
-  restore: function MinTrayR_restore() {
-    // This will also work with alwaysShow.
-    this.trayService.restore(window);
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-    let docElt = window.document.documentElement;
-    window.moveTo(docElt.getAttribute("storeScreenX"),
-                  docElt.getAttribute("storeScreenY"));
-#endif
-#endif
-    window.focus();
-  },
-  toggle: function MinTrayR_toggle() {
-    if (window.windowState == STATE_MINIMIZED) {
-      window.restore();
-      window.focus();
-    }
-    else if (!this._icon || this._icon.isMinimized) {
-      // this._icon is not set if the tray icon isn't always visible.
-      this.restore();
-    }
-    else
-      this.minimize();
-  },
-
-  setStatus: function MinTrayR_setStatus(aStatusParam) {
-    let us = Services.core.globalUserStatus;
-    us.setStatus(Status.toFlag(aStatusParam), us.statusText);
-  }
-};
-
-window.addEventListener("load", gMinTrayR.load.bind(gMinTrayR),
-                        {capture: true, once: true});
deleted file mode 100644
--- a/im/components/mintrayr/content/mintrayr.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % mintrayrDTD SYSTEM "chrome://instantbird/locale/mintrayr.dtd">
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %mintrayrDTD;
-  %instantbirdDTD;
-]>
-
-<overlay id="MinTrayR_overlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <script type="application/javascript" src="chrome://instantbird/content/mintrayr.js"/>
-
-  <keyset id="mainkeyset">
-    <key id="MinTrayR_minimize_key"
-         modifiers="&mintrayr.keys.minimize.modifiers;"
-         keycode="&mintrayr.keys.minimize.keycode;"
-         oncommand="gMinTrayR.minimize();"/>
-  </keyset>
-
-  <menupopup id="fileMenuPopup">
-    <menuitem id="MinTrayR_minimize"
-              label="&mintrayr.minimize;"
-              accesskey="&mintrayr.minimize.accesskey;"
-              tooltiptext="&mintrayr.minimize.tip;"
-              oncommand="gMinTrayR.minimize();"
-              key="MinTrayR_minimize_key"
-              insertbefore="menu_FileQuitItem"/>
-  </menupopup>
-
-  <popupset id="mainPopupSet">
-    <menupopup id="MinTrayR_context">
-      <menuitem id="MinTrayR_available"
-                label="&available;"
-                accesskey="&available.accesskey;"
-                oncommand="gMinTrayR.setStatus('available');"/>
-      <menuitem id="MinTrayR_unavailable"
-                label="&unavailable;"
-                accesskey="&unavailable.accesskey;"
-                oncommand="gMinTrayR.setStatus('away');"/>
-      <menuitem id="MinTrayR_offline"
-                label="&offline;"
-                accesskey="&offline.accesskey;"
-                oncommand="gMinTrayR.setStatus('offline');"/>
-      <menuseparator id="MinTrayR_sep-top"/>
-      <menuitem id="MinTrayR_restore"
-                label="&mintrayr.restore;"
-                accesskey="&mintrayr.restore.accesskey;"
-                oncommand="gMinTrayR.restore();"/>
-      <menuseparator id="MinTrayR_sep-bottom"/>
-    </menupopup>
-  </popupset>
-</overlay>
deleted file mode 100644
--- a/im/components/mintrayr/jar.mn
+++ /dev/null
@@ -1,9 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-instantbird.jar:
-% content instantbird %content/instantbird/
-*	content/instantbird/mintrayr.js   (content/mintrayr.js)
-	content/instantbird/mintrayr.xul  (content/mintrayr.xul)
-% overlay chrome://instantbird/content/blist.xul chrome://instantbird/content/mintrayr.xul
deleted file mode 100644
--- a/im/components/mintrayr/moz.build
+++ /dev/null
@@ -1,38 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-SOURCES += [
-    'trayModule.cpp',
-    'trayToolkit.cpp',
-]
-
-# Platform specific stuff
-if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
-    SOURCES += ['trayPlatformWin.cpp']
-    OS_LIBS += [
-        'shell32',
-    ]
-    RCFILE = 'resources.rc'
-    RESFILE = 'resources.res'
-
-elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
-    SOURCES += ['trayPlatformGtk2.cpp']
-    OS_LIBS += CONFIG['TK_LIBS']
-    OS_LIBS += CONFIG['XLIBS']
-    CXXFLAGS += CONFIG['MOZ_GTK2_CFLAGS']
-
-FINAL_LIBRARY = 'xul'
-
-XPIDL_SOURCES += [
-    'trayIToolkit.idl',
-]
-
-XPIDL_MODULE = 'trayToolkit'
-
-EXPORTS += [
-    'trayToolkit.h'
-]
-
-JAR_MANIFESTS += ['jar.mn']
deleted file mode 100644
--- a/im/components/mintrayr/resources.rc
+++ /dev/null
@@ -1,42 +0,0 @@
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this
-// file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#include<winver.h>
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-1 VERSIONINFO
- FILEVERSION 0,8,0,0
- PRODUCTVERSION 0,8,0,0
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x2L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "000004b0"
-        BEGIN
-            VALUE "FileDescription", "TrayToolkit XPCOM Components"
-            VALUE "FileVersion", "0, 9, 0, 0"
-            VALUE "InternalName", "TrayToolkit"
-            VALUE "LegalCopyright", "Copyright (C) 2008-2011 Nils Maier. MPL-Tri licensed"
-            VALUE "OriginalFilename", "trayToolkit.dll"
-            VALUE "ProductName", "MinTrayR Mozilla extension"
-            VALUE "ProductVersion", "0, 9, 0, 0"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x0, 1200
-    END
-END
deleted file mode 100644
--- a/im/components/mintrayr/trayIToolkit.idl
+++ /dev/null
@@ -1,80 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-interface mozIDOMWindow;
-
-[scriptable, uuid(4090c428-e534-11e5-91df-68b599e53270)]
-interface trayITrayIcon : nsISupports {
-
-  /**
-   * Associated DOM window
-   */
-  readonly attribute mozIDOMWindow window;
-
-  /**
-   * Window is minimized to tray
-   */
-  readonly attribute boolean isMinimized;
-
-  /**
-     * Indicates whether icon will be closed if window is restored
-   */
-  attribute boolean closeOnRestore;
-
-  /**
-   * Minimizes the window
-   */
-  void minimize();
-
-  /**
-   * Restores the window
-   */
-  void restore();
-
-  /**
-   * Closes the tray icon, restoring the window in the process
-   */
-  void close();
-};
-
-[scriptable, uuid(251192ae-e534-11e5-9bcb-68b599e53270)]
-interface trayITrayService : nsISupports {
-
-  /**
-   * Creates a tray icon for window
-   */
-  trayITrayIcon createIcon(in mozIDOMWindow window,  [optional] in boolean aCloseOnRestore);
-
-  /**
-   * Restores all windows from the tray
-   */
-  void restoreAll();
-
-  /**
-   * Watch a window, and if minimized send to tray
-   */
-  void watchMinimize(in mozIDOMWindow window);
-
-  /**
-   * unwatch a window again
-   */
-  void unwatchMinimize(in mozIDOMWindow window);
-
-  /**
-   * is the window watched
-   */
-  bool isWatchedWindow(in mozIDOMWindow window);
-
-  /**
-   * minimizes a window to the tray
-   */
-  void minimize(in mozIDOMWindow aWindow, [optional] in boolean aCloseOnRestore);
-
-  /**
-   * Restores a window from the tray
-   */
-  void restore(in mozIDOMWindow aWindow);
-};
deleted file mode 100644
--- a/im/components/mintrayr/trayModule.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "mozilla/ModuleUtils.h"
-#include "nsIClassInfoImpl.h"
-
-#include "trayToolkit.h"
-
-
-// Need to import TrayServiceImpl from mintrayr so that the macro works
-using mintrayr::TrayServiceImpl;
-
-// Generic factory
-NS_GENERIC_FACTORY_CONSTRUCTOR(TrayServiceImpl)
-NS_DEFINE_NAMED_CID(TRAYITRAYSERVICE_IID);
-
-static const mozilla::Module::CIDEntry kTrayIIDs[] = {
-    { &kTRAYITRAYSERVICE_IID, true, 0, TrayServiceImplConstructor },
-    { 0 }
-};
-static const mozilla::Module::ContractIDEntry kTrayContracts[] = {
-    { TRAYSERVICE_CONTRACTID, &kTRAYITRAYSERVICE_IID },
-    { 0 }
-};
-static const mozilla::Module::CategoryEntry kTrayCategories[] = {
-    { 0 }
-};
-static const mozilla::Module kTrayModule = {
-    mozilla::Module::kVersion,
-    kTrayIIDs,
-    kTrayContracts,
-    kTrayCategories
-};
-NSMODULE_DEFN(trayModule) = &kTrayModule;
deleted file mode 100644
--- a/im/components/mintrayr/trayPlatform.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * Platform specific stuff
- * Must be implemented for each platform
- */
-
-#ifndef __TRAYPLATFORM_H
-#define __TRAYPLATFORM_H
-
-#include "xpcom-config.h"
-
-#include "nsCOMPtr.h"
-#include "nsString.h"
-
-#include "mozIDOMWindow.h"
-
-namespace mintrayr {
-
-class TrayIconImpl;
-
-namespace platform {
-
-/**
- * Called when the service goes live
- */
-void Init();
-
-/**
- * Called when the service is destroyed
- */
-void Destroy();
-
-/**
- * Window should be watched
- */
-NS_IMETHODIMP WatchWindow(mozIDOMWindow *aWindow);
-
-/**
- * Window should be unwatched
- */
-NS_IMETHODIMP UnwatchWindow(mozIDOMWindow *aWindow);
-
-/**
- * Abstract helper class
- * Encapsulates the platform specific initialization code and message processing
- */
-class Icon {
-public:
-  virtual ~Icon() {}
-  virtual void Minimize() = 0;
-  virtual void Restore() = 0;
-};
-
-/**
- * Factory
- */
-Icon* CreateIcon(TrayIconImpl *aOwner, mozIDOMWindow* aWindow, const nsString& aTitle);
-
-} // namespace platform
-} // namespace mintrayr
-
-#endif
deleted file mode 100644
--- a/im/components/mintrayr/trayPlatformGtk2.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "trayToolkit.h"
-#include "trayPlatformGtk2.h"
-
-#include "nsCOMPtr.h"
-#include "nsServiceManagerUtils.h"
-
-/* gtk_status_icon_set_tooltip was added in GTK+ 2.10 and deprecated in 2.16 */
-#if !GTK_CHECK_VERSION(2,16,0)
-#define gtk_status_icon_set_tooltip_text gtk_status_icon_set_tooltip
-#endif
-
-namespace mintrayr {
-namespace platform {
-
-#define XATOM(atom) static const Atom atom = XInternAtom(xev->xany.display, #atom, false)
-
-/**
- * Helper: Gdk filter function to "watch" the window
- */
-static
-GdkFilterReturn filterWindows(XEvent *xev, GdkEvent* event, mozIDOMWindow* window)
-{
-  XATOM(WM_DELETE_WINDOW);
-
-  if (!xev) {
-    return GDK_FILTER_CONTINUE;
-  }
-
-  switch (xev->type) {
-    case MapNotify:
-      {
-        nsCOMPtr<trayITrayService> traySvc(do_GetService(TRAYSERVICE_CONTRACTID));
-        traySvc->Restore(window);
-      }
-      break;
-
-    case UnmapNotify:
-      if (DoMinimizeWindow(window, kTrayOnMinimize)) {
-        return GDK_FILTER_REMOVE;
-      }
-      break;
-
-    case ClientMessage:
-      if (xev->xclient.data.l
-          && static_cast<Atom>(xev->xclient.data.l[0]) == WM_DELETE_WINDOW
-          && DoMinimizeWindow(window, kTrayOnClose)
-      ) {
-        return GDK_FILTER_REMOVE;
-      }
-      break;
-
-    default:
-      break;
-  }
-  return GDK_FILTER_CONTINUE;
-}
-
-void Init() {}
-void Destroy() {}
-
-Icon* CreateIcon(TrayIconImpl *aOwner, mozIDOMWindow* aWindow, const nsString& aTitle)
-{
-  return new gtk2::Icon(aOwner, aWindow, aTitle);
-}
-
-NS_IMETHODIMP WatchWindow(mozIDOMWindow *aWindow)
-{
-  nsresult rv;
-
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  GdkWindow *gdkWindow = gdk_window_get_toplevel(reinterpret_cast<GdkWindow*>(native));
-  if (!gdkWindow) {
-    return NS_ERROR_UNEXPECTED;
-  }
-  gdk_window_add_filter(gdkWindow, reinterpret_cast<GdkFilterFunc>(filterWindows), aWindow);
-
-
-  return NS_OK;
-}
-NS_IMETHODIMP UnwatchWindow(mozIDOMWindow *aWindow)
-{
-  nsresult rv;
-
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  GdkWindow *gdkWindow = gdk_window_get_toplevel(reinterpret_cast<GdkWindow*>(native));
-  if (!gdkWindow) {
-    return NS_ERROR_UNEXPECTED;
-  }
-  gdk_window_remove_filter(gdkWindow, reinterpret_cast<GdkFilterFunc>(filterWindows), aWindow);
-
-  return NS_OK;
-}
-
-namespace gtk2 {
-
-Icon::Icon(TrayIconImpl *aIcon, mozIDOMWindow *aWindow, const nsString& aTitle)
-  : mStatusIcon(0), mGtkWindow(0), mGdkWindow(0), mIcon(aIcon)
-{
-  Init(aWindow, aTitle);
-}
-NS_IMETHODIMP Icon::Init(mozIDOMWindow *aWindow, const nsString& aTitle)
-{
-  nsresult rv;
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  // Get the window
-  mGdkWindow = gdk_window_get_toplevel(reinterpret_cast<GdkWindow*>(native));
-  if (!mGdkWindow) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Get the widget and gtk window
-  GtkWidget *widget;
-  gdk_window_get_user_data(mGdkWindow, reinterpret_cast<gpointer*>(&widget));
-  widget = gtk_widget_get_toplevel(widget);
-  mGtkWindow = reinterpret_cast<GtkWindow*>(widget);
-
-  // Set up tray icon
-  mStatusIcon = gtk_status_icon_new();
-
-  // Get the window icon and set it
-  GdkPixbuf *buf = gtk_window_get_icon(mGtkWindow);
-  if (buf) {
-    gtk_status_icon_set_from_pixbuf(mStatusIcon, buf);
-  } else {
-    const gchar *iconname = gtk_window_get_icon_name(mGtkWindow);
-    if (iconname)
-      gtk_status_icon_set_from_icon_name(mStatusIcon, iconname);
-  }
-
-  // Get and set the title
-  if (aTitle.IsEmpty()) {
-    gtk_status_icon_set_tooltip_text(mStatusIcon, gtk_window_get_title(mGtkWindow));
-    gtk_widget_add_events(widget, GDK_PROPERTY_CHANGE_MASK);
-    propertyEventId = g_signal_connect(mGtkWindow, "property-notify-event", G_CALLBACK(gtkPropertyEvent), this);
-  }
-  else {
-    NS_ConvertUTF16toUTF8 titleUTF8(aTitle);
-    gtk_status_icon_set_tooltip_text(mStatusIcon, reinterpret_cast<const char*>(titleUTF8.get()));
-    propertyEventId = 0;
-  }
-
-  // Add signals
-  g_signal_connect(G_OBJECT(mStatusIcon), "button-press-event", G_CALLBACK(gtkButtonEvent), this);
-  g_signal_connect(G_OBJECT(mStatusIcon), "button-release-event", G_CALLBACK(gtkButtonEvent), this);
-
-  // Make visible
-  gtk_status_icon_set_visible(mStatusIcon, 1);
-  return NS_OK;
-}
-
-Icon::~Icon()
-{
-  Restore();
-
-  if (mStatusIcon) {
-    gtk_status_icon_set_visible(mStatusIcon, 0);
-    g_object_unref(mStatusIcon);
-  }
-  if (propertyEventId) {
-    g_signal_handler_disconnect(mGtkWindow, propertyEventId);
-  }
-}
-
-void Icon::Restore()
-{
-  gdk_window_show(mGdkWindow);
-}
-
-void Icon::Minimize() {
-  // Hide the window
-  gdk_window_hide(mGdkWindow);
-}
-
-void Icon::buttonEvent(GdkEventButton *event)
-{
-  nsString eventName;
-  switch (event->type) {
-    case GDK_BUTTON_RELEASE: // use release, so that we don't duplicate events
-      eventName = NS_LITERAL_STRING("TrayClick");
-      break;
-    case GDK_2BUTTON_PRESS:
-      eventName = NS_LITERAL_STRING("TrayDblClick");
-      break;
-    case GDK_3BUTTON_PRESS:
-      eventName = NS_LITERAL_STRING("TrayTriClick");
-      break;
-    default:
-      return;
-  }
-
-  nsPoint pt((nscoord)(event->x + event->x_root), (nscoord)(event->y + event->y_root));
-
-  // Dispatch the event
-#define HASSTATE(x) (event->state & x ? true : false)
-  mIcon->DispatchMouseEvent(
-      eventName,
-      event->button - 1,
-      pt,
-      HASSTATE(GDK_CONTROL_MASK),
-      HASSTATE(GDK_MOD1_MASK),
-      HASSTATE(GDK_SHIFT_MASK)
-      );
-#undef HASSTATE
-}
-
-gboolean Icon::propertyEvent()
-{
-  gtk_status_icon_set_tooltip_text(mStatusIcon, gtk_window_get_title(mGtkWindow));
-  return FALSE;
-}
-
-} // namespace gtk2
-
-}} // namespaces
deleted file mode 100644
--- a/im/components/mintrayr/trayPlatformGtk2.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef __TRAYPLATFORMWIN_H
-#define __TRAYPLATFORMWIN_H
-
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-
-#include "trayPlatform.h"
-
-#include "nsCOMPtr.h"
-
-#include "mozIDOMWindow.h"
-
-namespace mintrayr {
-namespace platform {
-namespace gtk2 {
-
-/**
- * Helper class
- * Encapsulates the Gtk2 specific initialization code and message processing
- */
-class Icon : public platform::Icon {
-private:
-public:
-  GtkStatusIcon *mStatusIcon;
-  GtkWindow *mGtkWindow;
-  GdkWindow *mGdkWindow;
-  TrayIconImpl *mIcon;
-
-  Icon(TrayIconImpl *aOwner, mozIDOMWindow* aWindow, const nsString& aTitle);
-  virtual ~Icon();
-
-  virtual void Minimize();
-  virtual void Restore();
-
-private:
-  NS_IMETHOD Init(mozIDOMWindow *aWindow, const nsString& aTitle);
-
-  void buttonEvent(GdkEventButton *event);
-  static void gtkButtonEvent(GtkStatusIcon*, GdkEventButton *event, Icon *icon) {
-    icon->buttonEvent(event);
-  }
-  gboolean propertyEvent();
-  gulong propertyEventId;
-  static gboolean gtkPropertyEvent(GtkStatusIcon*, GdkEventProperty *event, Icon *icon) {
-    return icon->propertyEvent();
-  }
-
-};
-
-}}} // namespaces
-
-#endif
deleted file mode 100644
--- a/im/components/mintrayr/trayPlatformWin.cpp
+++ /dev/null
@@ -1,445 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "trayToolkit.h"
-#include "trayPlatformWin.h"
-
-namespace mintrayr {
-namespace platform {
-
-static const wchar_t kTrayMessage[]  = L"_MINTRAYR_TrayMessageW";
-static const wchar_t kDOMWindow[]  = L"_MINTRAYR_DOM";
-static const wchar_t kOldProc[] = L"_MINTRAYR_WRAPPER_OLD_PROC";
-static const wchar_t kWatch[] = L"_MINTRAYR_WATCH";
-static const wchar_t kIcon[] = L"_MINTRAYR_ICON";
-static const wchar_t kPlatformIcon[] = L"_MINTRAYR_PICON";
-
-typedef BOOL (WINAPI *pChangeWindowMessageFilter)(UINT message, DWORD dwFlag);
-#ifndef MGSFLT_ADD
-  // Not a Vista SDK
-  #	define MSGFLT_ADD 1
-  #	define MSGFLT_REMOVE 2
-#endif
-
-static UINT WM_TASKBARCREATED = 0;
-static UINT WM_TRAYMESSAGE = 0;
-
-/**
- * Helper function that will allow us to receive some broadcast messages on Vista
- * (We need to bypass that filter if we run as Administrator, but the orginating process
- * has less priviledges)
- */
-static void AdjustMessageFilters(UINT filter)
-{
-  HMODULE user32 = LoadLibraryW(L"user32.dll");
-  if (user32 != 0) {
-    pChangeWindowMessageFilter changeWindowMessageFilter =
-      reinterpret_cast<pChangeWindowMessageFilter>(GetProcAddress(
-        user32,
-        "ChangeWindowMessageFilter"
-      ));
-    if (changeWindowMessageFilter != 0) {
-      changeWindowMessageFilter(WM_TASKBARCREATED, filter);
-    }
-    FreeLibrary(user32);
-  }
-}
-
-/**
- * Helper class to get Windows Version information
- */
-class OSVersionInfo : public OSVERSIONINFOEXW
-{
-public:
-  OSVersionInfo() {
-    dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
-    ::GetVersionExW(reinterpret_cast<LPOSVERSIONINFOW>(this));
-  }
-  bool isVistaOrLater() {
-    return dwMajorVersion >= 6;
-  }
-};
-
-/**
- * Helper: We need to get the DOMWindow from the hwnd
- */
-static bool DoMinimizeWindowWin(HWND hwnd, eMinimizeActions action)
-{
-  mozIDOMWindow *window = reinterpret_cast<mozIDOMWindow*>(::GetPropW(hwnd, kDOMWindow));
-  if (window == 0) {
-    return false;
-  }
-  if (::GetPropW(hwnd, kWatch) == (HANDLE)0x2) {
-    return true;
-  }
-  return DoMinimizeWindow(window, action);
-}
-
-/**
- * Helper: Subclassed Windows WNDPROC
- */
-static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-  using win::Icon;
-
-  if (::GetPropW(hwnd, kWatch) > (HANDLE)0x0) {
-    // Watcher stuff
-
-    switch (uMsg) {
-    case WM_WINDOWPOSCHANGING: {
-      /* XXX Fix this bit to something more reasonable
-         The following code kinda replicates the way mozilla gets the window state.
-         We intensionally "hide" the SW_SHOWMINIMIZED here.
-         This indeed might cause some side effects, but if it didn't we couldn't open
-         menus due to bugzilla #435848,.
-         This might defeat said bugfix completely reverting to old behavior, but only when we're active, of course.
-         */
-      WINDOWPOS *wp = reinterpret_cast<WINDOWPOS*>(lParam);
-      if (wp == 0) {
-        goto WndProcEnd;
-      }
-      if (wp->flags & SWP_FRAMECHANGED && ::IsWindowVisible(hwnd)) {
-        WINDOWPLACEMENT pl;
-        pl.length = sizeof(WINDOWPLACEMENT);
-        ::GetWindowPlacement(hwnd, &pl);
-        if (pl.showCmd == SW_SHOWMINIMIZED) {
-          return 0;
-        }
-      }
-      break;
-    }
-    case WM_WINDOWPOSCHANGED: {
-      /* XXX Fix this bit to something more reasonable
-         The following code kinda replicates the way mozilla gets the window state.
-         We intensionally "hide" the SW_SHOWMINIMIZED here.
-         This indeed might cause some side effects, but if it didn't we couldn't open
-         menus due to bugzilla #435848,.
-         This might defeat said bugfix completely reverting to old behavior, but only when we're active, of course.
-      */
-      WINDOWPOS *wp = reinterpret_cast<WINDOWPOS*>(lParam);
-      if (wp == 0) {
-        goto WndProcEnd;
-      }
-      if (wp->flags & SWP_SHOWWINDOW) {
-        // Shown again, unexpectedly that is, so release
-        Icon *me = reinterpret_cast<Icon*>(GetPropW(hwnd, kPlatformIcon));
-        if (me == 0 || me->mOwnerIcon == 0 || me->mOwnerIcon->IsClosed()) {
-          goto WndProcEnd;
-        }
-        me->mOwnerIcon->Restore();
-      }
-      else if (wp->flags & SWP_FRAMECHANGED && ::IsWindowVisible(hwnd)) {
-        WINDOWPLACEMENT pl;
-        pl.length = sizeof(WINDOWPLACEMENT);
-        ::GetWindowPlacement(hwnd, &pl);
-        if (pl.showCmd == SW_SHOWMINIMIZED) {
-          if (DoMinimizeWindowWin(hwnd, kTrayOnMinimize)) {
-            // We're active, ignore
-            return 0;
-          }
-        }
-      }
-      break;
-    } // case WM_WINDOWPOSCHANGED
-    case WM_NCLBUTTONDOWN:
-    case WM_NCLBUTTONUP:
-      // Frame button clicked
-      if (wParam == HTCLOSE && DoMinimizeWindowWin(hwnd, kTrayOnClose)) {
-        return TRUE;
-      }
-      break;
-
-    case WM_SYSCOMMAND:
-      // Window menu
-      if (wParam == SC_CLOSE && DoMinimizeWindowWin(hwnd, kTrayOnClose)) {
-        return 0;
-      }
-      break;
-    }
-  }
-
-  if (::GetPropW(hwnd, kIcon) == (HANDLE)0x1) {
-    // Icon stuff
-
-    // This is a badly documented custom broadcast message by explorer
-    if (uMsg == WM_TASKBARCREATED) {
-      // Try to get the platform icon
-      Icon *me = reinterpret_cast<Icon*>(GetPropW(hwnd, kPlatformIcon));
-      if (me == 0 || me->mOwnerIcon == 0 || me->mOwnerIcon->IsClosed()) {
-        goto WndProcEnd;
-      }
-      // The taskbar was (re)created. Add ourselves again.
-      Shell_NotifyIconW(NIM_ADD, &me->mIconData);
-    }
-
-    // We got clicked. How exciting, isn't it.
-    else if (uMsg == WM_TRAYMESSAGE) {
-      nsString eventName;
-      PRUint16 button = 0;
-      switch (LOWORD(lParam)) {
-        case WM_LBUTTONUP:
-        case WM_MBUTTONUP:
-        case WM_RBUTTONUP:
-        case WM_CONTEXTMENU:
-        case NIN_KEYSELECT:
-          eventName = NS_LITERAL_STRING("TrayClick");
-          break;
-        case WM_LBUTTONDBLCLK:
-        case WM_MBUTTONDBLCLK:
-        case WM_RBUTTONDBLCLK:
-          eventName = NS_LITERAL_STRING("TrayDblClick");
-          break;
-      }
-      switch (LOWORD(lParam)) {
-        case WM_LBUTTONUP:
-        case WM_LBUTTONDBLCLK:
-          button = 0;
-          break;
-        case WM_MBUTTONUP:
-        case WM_MBUTTONDBLCLK:
-          button = 1;
-          break;
-        case WM_RBUTTONUP:
-        case WM_RBUTTONDBLCLK:
-        case WM_CONTEXTMENU:
-        case NIN_KEYSELECT:
-          button = 2;
-          break;
-      }
-      if (eventName.IsEmpty() == false) {
-        POINT wpt;
-        if (GetCursorPos(&wpt) == TRUE) {
-          nsPoint pt((nscoord)wpt.x, (nscoord)wpt.y);
-
-          bool ctrlKey = (::GetKeyState(VK_CONTROL) & 0x8000) != 0;
-          bool altKey = (::GetKeyState(VK_MENU) & 0x8000) != 0;
-          bool shiftKey = (::GetKeyState(VK_SHIFT) & 0x8000) != 0;
-
-          // SFW/PM is a win32 hack, so that the context menu is hidden when loosing focus.
-          ::SetForegroundWindow(hwnd);
-
-          // Try to get the platform icon
-          Icon *me = reinterpret_cast<Icon*>(GetPropW(hwnd, kPlatformIcon));
-          if (me != 0 && me->mOwnerIcon != 0 && !me->mOwnerIcon->IsClosed()) {
-            me->mOwnerIcon->DispatchMouseEvent(eventName, button, pt, ctrlKey, altKey, shiftKey);
-          }
-
-          ::PostMessage(hwnd, WM_NULL, 0, 0L);
-        }
-      }
-      return 0;
-    }
-
-    // Window title changed
-    else if (uMsg == WM_SETTEXT) {
-      // Try to get the platform icons
-      Icon *me = reinterpret_cast<Icon*>(GetPropW(hwnd, kPlatformIcon));
-      if (me == 0 || me->mOwnerIcon == 0 || me->mOwnerIcon->IsClosed()) {
-        goto WndProcEnd;
-      }
-
-      // First, let the original wndproc process this message,
-      // so that we may query the thing afterwards ;)
-      // this is required because we cannot know the encoding of this message for sure ;)
-      LRESULT rv;
-      WNDPROC oldWindowProc = reinterpret_cast<WNDPROC>(::GetPropW(hwnd, kOldProc));
-      if (oldWindowProc != 0) {
-        rv = CallWindowProcW(oldWindowProc, hwnd, uMsg, wParam, lParam);
-      }
-      else {
-        rv = DefWindowProcW(hwnd, uMsg, wParam, lParam);
-      }
-
-      if (::GetWindowTextW(hwnd, me->mIconData.szTip, 128) != 0) {
-        me->mIconData.szTip[128] = '\0';
-        Shell_NotifyIconW(NIM_MODIFY, &me->mIconData);
-      }
-      return rv;
-    }
-  }
-
-WndProcEnd:
-  // Call the old WNDPROC or at lest DefWindowProc
-  WNDPROC oldProc = reinterpret_cast<WNDPROC>(::GetPropW(hwnd, kOldProc));
-  if (oldProc != 0) {
-    return ::CallWindowProcW(oldProc, hwnd, uMsg, wParam, lParam);
-  }
-  return ::DefWindowProcW(hwnd, uMsg, wParam, lParam);
-}
-
-static void SetupWnd(HWND hwnd, mozIDOMWindow *aWindow)
-{
-  if (::GetPropW(hwnd, kOldProc) == 0) {
-    ::SetPropW(hwnd, kDOMWindow, reinterpret_cast<HANDLE>(aWindow));
-    WNDPROC oldProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtrW(hwnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(WndProc)));
-    ::SetPropW(hwnd, kOldProc, reinterpret_cast<HANDLE>(oldProc));
-  }
-}
-
-void Init()
-{
-  // Get TaskbarCreated
-  WM_TASKBARCREATED = RegisterWindowMessageW(L"TaskbarCreated");
-  // We register this as well, as we cannot know which WM_USER values are already taken
-  WM_TRAYMESSAGE = RegisterWindowMessageW(kTrayMessage);
-
-  // Vista (Administrator) needs some love, or else we won't receive anything due to UIPI
-  if (OSVersionInfo().isVistaOrLater()) {
-    AdjustMessageFilters(MSGFLT_ADD);
-  }
-}
-void Destroy() {
-  // Vista (Administrator) needs some unlove, see c'tor
-  if (OSVersionInfo().isVistaOrLater()) {
-    AdjustMessageFilters(MSGFLT_REMOVE);
-  }
-}
-
-Icon* CreateIcon(TrayIconImpl *aOwner, mozIDOMWindow* aWindow, const nsString& aTitle)
-{
-  return new win::Icon(aOwner, aWindow, aTitle);
-}
-
-NS_IMETHODIMP WatchWindow(mozIDOMWindow *aWindow)
-{
-  nsresult rv;
-
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  HWND hwnd = reinterpret_cast<HWND>(native);
-  SetupWnd(hwnd, aWindow);
-  ::SetPropW(hwnd, kWatch, reinterpret_cast<HANDLE>(0x1));
-
-  return NS_OK;
-}
-NS_IMETHODIMP UnwatchWindow(mozIDOMWindow *aWindow)
-{
-  nsresult rv;
-
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  HWND hwnd = reinterpret_cast<HWND>(native);
-  ::RemovePropW(hwnd, kWatch);
-
-  return NS_OK;
-}
-
-namespace win {
-
-Icon::Icon(TrayIconImpl *aIcon, mozIDOMWindow *aWindow, const nsString& aTitle)
-  : mOwnerIcon(aIcon)
-{
-  Init(aWindow, aTitle);
-}
-NS_IMETHODIMP Icon::Init(mozIDOMWindow *aWindow, const nsString& aTitle)
-{
-  nsresult rv;
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  mWnd = reinterpret_cast<HWND>(native);
-  SetupWnd(mWnd, aWindow);
-
-  // Hook window
-  ::SetPropW(mWnd, kIcon, reinterpret_cast<HANDLE>(0x1));
-
-  // Init the icon data according to MSDN
-  ZeroMemory(&mIconData, sizeof(mIconData));
-  mIconData.cbSize = sizeof(mIconData);
-
-  // Copy the title
-  lstrcpynW(mIconData.szTip, aTitle.get(), 127);
-  mIconData.szTip[128] = '\0'; // Better be safe than sorry :p
-
-  // Get the window icon
-  HICON icon = reinterpret_cast<HICON>(::SendMessageW(mWnd, WM_GETICON, ICON_SMALL, 0));
-  if (icon == 0) {
-    // Alternative method. Get from the window class
-    icon = reinterpret_cast<HICON>(::GetClassLongPtrW(mWnd, GCLP_HICONSM));
-  }
-  // Alternative method: get the first icon from the main module (executable image of the process)
-  if (icon == 0) {
-    icon = ::LoadIcon(GetModuleHandleW(0), MAKEINTRESOURCE(0));
-  }
-  // Alternative method. Use OS default icon
-  if (icon == 0) {
-    icon = ::LoadIcon(0, IDI_APPLICATION);
-  }
-  mIconData.hIcon = icon;
-
-  // Set the rest of the members
-  mIconData.hWnd = mWnd;
-  mIconData.uCallbackMessage = WM_TRAYMESSAGE;
-  mIconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
-  mIconData.uVersion = 5;
-
-  // Install the icon
-  ::Shell_NotifyIconW(NIM_ADD, &mIconData);
-  ::Shell_NotifyIconW(NIM_SETVERSION, &mIconData);
-
-  ::SetPropW(mWnd, kIcon, reinterpret_cast<HANDLE>(0x1));
-  ::SetPropW(mWnd, kPlatformIcon, reinterpret_cast<HANDLE>(this));
-
-  return NS_OK;
-}
-
-Icon::~Icon()
-{
-  Restore();
-
-  // Disable message handling
-  ::RemovePropW(mWnd, kIcon);
-  ::RemovePropW(mWnd, kPlatformIcon);
-
-  // Remove the icon
-  ::Shell_NotifyIconW(NIM_DELETE, &mIconData);
-
-  mOwnerIcon = 0;
-}
-
-void Icon::Restore()
-{
-  // Show the window again
-  ::ShowWindow(mWnd, SW_SHOW);
-
-  // If it was minimized then restore it as well
-  if (::IsIconic(mWnd)) {
-    ::ShowWindow(mWnd, SW_RESTORE);
-    // Try to grab focus
-    ::SetForegroundWindow(mWnd);
-  }
-}
-
-void Icon::Minimize() {
-  // We need to get a minimize through.
-  // Otherwise the SFW/PM hack won't work
-  // However we need to protect against the watcher watching this
-  HANDLE watch = ::GetPropW(mWnd, kWatch);
-  ::SetPropW(mWnd, kWatch, (HANDLE)(0x2));
-  ::ShowWindow(mWnd, SW_MINIMIZE);
-  ::SetPropW(mWnd, kWatch, watch);
-
-  ::ShowWindow(mWnd, SW_HIDE);
-}
-
-} // namespace win
-
-}} // namespaces
deleted file mode 100644
--- a/im/components/mintrayr/trayPlatformWin.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef __TRAYPLATFORMWIN_H
-#define __TRAYPLATFORMWIN_H
-
-/**
- * Windows specific implementation
- */
-
-#ifdef _WIN32_IE
-#	undef _WIN32_IE
-#endif
-#define _WIN32_IE 0x0600 // We want more features
-#include <windows.h>
-#include <shellapi.h>
-
-#include "trayPlatform.h"
-
-#include "nsCOMPtr.h"
-
-#include "mozIDOMWindow.h"
-
-namespace mintrayr {
-namespace platform {
-namespace win {
-
-/**
- * Helper class
- * Encapsulates the Windows specific initialization code and message processing
- */
-class Icon : public platform::Icon {
-private:
-public:
-  HWND mWnd;
-  NOTIFYICONDATAW mIconData;
-  TrayIconImpl *mOwnerIcon;
-
-  Icon(TrayIconImpl *aOwner, mozIDOMWindow* aWindow, const nsString& aTitle);
-  virtual ~Icon();
-
-  virtual void Minimize();
-  virtual void Restore();
-private:
-  NS_IMETHOD Init(mozIDOMWindow *aWindow, const nsString& aTitle);
-};
-
-}}} // namespaces
-
-#endif
deleted file mode 100644
--- a/im/components/mintrayr/trayToolkit.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "trayToolkit.h"
-#include "trayPlatform.h"
-
-#include "nsCOMPtr.h"
-#include "nsString.h"
-#include "nsServiceManagerUtils.h"
-
-#include "mozIDOMWindow.h"
-#include "nsIDocument.h"
-#include "nsIDOMDocument.h"
-
-#include "nsIDOMEvent.h"
-#include "nsIDOMEventTarget.h"
-#include "nsIDOMMouseEvent.h"
-
-#include "nsIWebNavigation.h"
-
-#include "nsIInterfaceRequestorUtils.h"
-#include "nsIObserverService.h"
-
-#include "nsIPrefService.h"
-#include "nsIPrefBranch.h"
-
-#ifdef WIN32
-#define strcasecmp stricmp
-#endif
-
-namespace mintrayr {
-
-bool DoMinimizeWindow(mozIDOMWindow *window, eMinimizeActions action)
-{
-  if (window == 0) {
-    return false;
-  }
-
-  nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID));
-  if (prefs) {
-    PRInt32 whenToMinimize = 0;
-    prefs->GetIntPref("extensions.mintrayr.minimizeon", &whenToMinimize);
-    if ((whenToMinimize & action) == 0) {
-      return false;
-    }
-  }
-
-  nsresult rv;
-  nsCOMPtr<trayITrayService> traySvc(do_GetService(TRAYSERVICE_CONTRACTID, &rv));
-  if (NS_SUCCEEDED(rv)) {
-    traySvc->Minimize(window, true);
-  }
-  return NS_SUCCEEDED(rv);
-}
-
-/**
- * Helper: Get the base window for a DOM window
- */
-NS_IMETHODIMP GetBaseWindow(mozIDOMWindow *aWindow, nsIBaseWindow **aBaseWindow)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-  NS_ENSURE_ARG_POINTER(aBaseWindow);
-
-  nsresult rv;
-
-  nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(aWindow, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(webNav, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  *aBaseWindow = baseWindow;
-  NS_IF_ADDREF(*aBaseWindow);
-  return NS_OK;
-}
-
-/**
- * Helper: Dispatch a trusted general event
- */
-NS_IMETHODIMP DispatchTrustedEvent(mozIDOMWindow *aWindow, const nsAString& aEventName)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  nsresult rv;
-
-  nsCOMPtr<nsPIDOMWindowInner> window(do_QueryInterface(aWindow));
-  NS_ENSURE_STATE(window);
-
-  nsCOMPtr<nsIDocument> doc = window->GetExtantDoc();
-  NS_ENSURE_STATE(doc);
-
-  nsCOMPtr<nsIDOMDocument> domDocument(do_QueryInterface(doc));
-  NS_ENSURE_STATE(domDocument);
-
-  nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(domDocument));
-  NS_ENSURE_TRUE(target, NS_ERROR_INVALID_ARG);
-
-  nsCOMPtr<nsIDOMEvent> event;
-  rv = domDocument->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  event->InitEvent(aEventName, false, true);
-  event->SetTrusted(true);
-
-  bool dummy;
-  return target->DispatchEvent(event, &dummy);
-}
-
-/* TrayIconImpl */
-
-NS_IMPL_ISUPPORTS(TrayIconImpl, trayITrayIcon, nsIDOMEventListener)
-
-NS_IMETHODIMP TrayIconImpl::GetWindow(mozIDOMWindow **aWindow)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-  *aWindow = mWindow;
-  NS_ADDREF(*aWindow);
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayIconImpl::GetIsMinimized(bool *aIsMinimized)
-{
-  NS_ENSURE_ARG_POINTER(aIsMinimized);
-  *aIsMinimized = mIsMinimized;
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayIconImpl::GetCloseOnRestore(bool *aCloseOnRestore)
-{
-  NS_ENSURE_ARG_POINTER(aCloseOnRestore);
-  *aCloseOnRestore = mCloseOnRestore;
-  return NS_OK;
-}
-NS_IMETHODIMP TrayIconImpl::SetCloseOnRestore(bool aCloseOnRestore)
-{
-  mCloseOnRestore = aCloseOnRestore;
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayIconImpl::Minimize()
-{
-  if (mClosed) {
-    return NS_ERROR_NOT_INITIALIZED;
-  }
-  if (mIsMinimized) {
-    // Already minimized
-    return NS_OK;
-  }
-  mPlatformIcon->Minimize();
-  mIsMinimized = true;
-  return NS_OK;
-}
-NS_IMETHODIMP TrayIconImpl::Restore()
-{
-  if (mClosed) {
-    return NS_ERROR_NOT_INITIALIZED;
-  }
-  if (!mIsMinimized) {
-    // Not minimized
-    return NS_OK;
-  }
-  if (mCloseOnRestore) {
-    Close();
-  }
-  else {
-    mPlatformIcon->Restore();
-  }
-  mIsMinimized = false;
-
-  return NS_OK;
-}
-NS_IMETHODIMP TrayIconImpl::Close()
-{
-  if (mClosed) {
-    return NS_OK;
-  }
-  mClosed = true;
-
-  delete mPlatformIcon.forget();
-  mService->CloseIcon(this);
-  mIsMinimized = false;
-
-  nsresult rv;
-  nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(mWindow, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-  target->RemoveEventListener(NS_LITERAL_STRING("unload"), this, false);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayIconImpl::HandleEvent(nsIDOMEvent *aEvent)
-{
-  NS_ENSURE_ARG_POINTER(aEvent);
-  Close();
-  return NS_OK;
-}
-
-
-NS_IMETHODIMP TrayIconImpl::Init(mozIDOMWindow *aWindow, bool aCloseOnRestore)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  nsresult rv;
-
-  mCloseOnRestore = aCloseOnRestore;
-
-  nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(aWindow, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-  rv = target->AddEventListener(NS_LITERAL_STRING("unload"), this, false);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsCOMPtr<nsIBaseWindow> baseWindow;
-  rv = GetBaseWindow(aWindow, getter_AddRefs(baseWindow));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nativeWindow native = 0;
-  rv = baseWindow->GetParentNativeWindow(&native);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsString title;
-  baseWindow->GetTitle(getter_Copies(title));
-  mPlatformIcon = platform::CreateIcon(this, aWindow, title);
-  mWindow = aWindow;
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayIconImpl::DispatchMouseEvent(const nsAString& aEventName, PRUint16 aButton, nsPoint& pt, bool aCtrlKey, bool aAltKey, bool aShiftKey)
-{
-  nsresult rv;
-
-  nsCOMPtr<nsPIDOMWindowInner> window(do_QueryInterface(mWindow));
-  NS_ENSURE_TRUE(window, NS_ERROR_INVALID_ARG);
-
-  nsCOMPtr<nsIDocument> doc = window->GetExtantDoc();
-  NS_ENSURE_STATE(doc);
-
-  nsCOMPtr<nsIDOMDocument> domDocument(do_QueryInterface(doc));
-  NS_ENSURE_STATE(domDocument);
-
-  nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(domDocument));
-  NS_ENSURE_TRUE(target, NS_ERROR_INVALID_ARG);
-
-  nsCOMPtr<nsIDOMEvent> event;
-  rv = domDocument->CreateEvent(NS_LITERAL_STRING("MouseEvents"), getter_AddRefs(event));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsCOMPtr<nsIDOMMouseEvent> mouseEvent(do_QueryInterface(event, &rv));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  rv = mouseEvent->InitMouseEvent(
-    aEventName,
-    false,
-    true,
-    mWindow,
-    0,
-    pt.x,
-    pt.y,
-    0,
-    0,
-    aCtrlKey,
-    aAltKey,
-    aShiftKey,
-    false,
-    aButton,
-    target
-    );
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  bool dummy;
-  return target->DispatchEvent(event, &dummy);
-}
-
-/* TrayServiceImpl */
-
-NS_IMPL_ISUPPORTS(TrayServiceImpl, trayITrayService, nsIObserver)
-
-TrayServiceImpl::TrayServiceImpl()
-{
-  platform::Init();
-
-  // Observe when the app is going down.
-  // Else we might not properly clean up
-  // And leave some tray icons behind
-  nsresult rv;
-  nsCOMPtr<nsIObserverService> obs(do_GetService("@mozilla.org/observer-service;1", &rv));
-  if (NS_SUCCEEDED(rv)) {
-    obs->AddObserver(static_cast<nsIObserver*>(this), "xpcom-shutdown", false);
-  }
-
-}
-TrayServiceImpl::~TrayServiceImpl()
-{
-  Destroy();
-  platform::Destroy();
-}
-void TrayServiceImpl::Destroy() {
-  UnwatchAll();
-  RestoreAll();
-
-  // Better be safe :p
-  mIcons.Clear();
-  mWatches.Clear();
-}
-
-NS_IMETHODIMP TrayServiceImpl::CreateIcon(mozIDOMWindow *aWindow, bool aCloseOnRestore, trayITrayIcon **aResult)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  nsresult rv;
-  const PRInt32 count = mIcons.Count();
-
-  for (PRInt32 i = 0; i < count; ++i) {
-    nsCOMPtr<mozIDOMWindow> domWindow;
-    rv = mIcons[i]->GetWindow(getter_AddRefs(domWindow));
-    if (NS_FAILED(rv)) {
-      continue;
-    }
-    if (domWindow != aWindow) {
-      continue;
-    }
-    *aResult = mIcons[i];
-    NS_ADDREF(*aResult);
-    return NS_OK;
-  }
-
-  RefPtr<TrayIconImpl> icon = new TrayIconImpl(this);
-  rv = icon->Init(aWindow, aCloseOnRestore);
-  if (NS_SUCCEEDED(rv)) {
-    mIcons.AppendObject(icon);
-    if (aResult) {
-      icon.forget(aResult);
-    }
-  }
-  return rv;
-}
-
-NS_IMETHODIMP TrayServiceImpl::RestoreAll()
-{
-  const PRInt32 count = mIcons.Count();
-  for (PRInt32 i = count - 1; i > -1; --i) {
-    mIcons[i]->Restore();
-  }
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayServiceImpl::WatchMinimize(mozIDOMWindow *aWindow)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  const PRInt32 index = mWatches.IndexOf(aWindow);
-  if (index != -1) {
-    return NS_OK;
-  }
-
-  if (!NS_SUCCEEDED(platform::WatchWindow(aWindow))) {
-    return NS_ERROR_INVALID_ARG;
-  }
-  mWatches.AppendObject(aWindow);
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayServiceImpl::UnwatchMinimize(mozIDOMWindow *aWindow)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  if (NS_SUCCEEDED(platform::UnwatchWindow(aWindow))) {
-    return NS_ERROR_INVALID_ARG;
-  }
-  mWatches.RemoveObject(aWindow);
-  return NS_OK;
-}
-
-NS_IMETHODIMP TrayServiceImpl::Minimize(mozIDOMWindow *aWindow, bool aCloseOnRestore)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  nsresult rv;
-
-  nsCOMPtr<trayITrayIcon> icon;
-  rv = CreateIcon(aWindow, aCloseOnRestore, getter_AddRefs(icon));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  rv = icon->Minimize();
-  return rv;
-}
-
-NS_IMETHODIMP TrayServiceImpl::Restore(mozIDOMWindow *aWindow)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-
-  nsresult rv;
-  const PRInt32 count = mIcons.Count();
-
-  for (PRInt32 i = 0; i < count; ++i) {
-    nsCOMPtr<mozIDOMWindow> domWindow;
-    rv = mIcons[i]->GetWindow(getter_AddRefs(domWindow));
-    if (NS_FAILED(rv)) {
-      continue;
-    }
-    if (domWindow != aWindow) {
-      continue;
-    }
-    return mIcons[i]->Restore();
-  }
-  return NS_ERROR_INVALID_ARG;
-}
-
-NS_IMETHODIMP TrayServiceImpl::IsWatchedWindow(mozIDOMWindow *aWindow, bool *aResult)
-{
-  NS_ENSURE_ARG_POINTER(aWindow);
-  NS_ENSURE_ARG_POINTER(aResult);
-
-  *aResult = mWatches.IndexOfObject(aWindow) != -1 ? true : false;
-  return NS_OK;
-}
-
-void TrayServiceImpl::UnwatchAll() {
-  const PRInt32 count = mWatches.Count();
-  for (PRInt32 i = 0; i < count; ++i) {
-    platform::UnwatchWindow(mWatches[i]);
-  }
-  mWatches.Clear();
-}
-
-void TrayServiceImpl::CloseIcon(trayITrayIcon *aIcon)
-{
-  mIcons.RemoveObject(aIcon);
-}
-
-NS_IMETHODIMP TrayServiceImpl::Observe(nsISupports *, const char *aTopic, const char16_t *)
-{
-  if (strcasecmp(aTopic, "xpcom-shutdown") == 0) {
-    Destroy();
-
-    nsresult rv;
-    nsCOMPtr<nsIObserverService> obs(do_GetService("@mozilla.org/observer-service;1", &rv));
-    if (NS_SUCCEEDED(rv)) {
-      obs->RemoveObserver(static_cast<nsIObserver*>(this), "xpcom-shutdown");
-    }
-  }
-  return NS_OK;
-}
-
-} // namespace mintrayr
deleted file mode 100644
--- a/im/components/mintrayr/trayToolkit.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef __TRAYTOOLKIT_IMPL_H
-#define __TRAYTOOLKIT_IMPL_H
-
-#include "xpcom-config.h"
-
-#include "nsCOMArray.h"
-#include "nsCOMPtr.h"
-#include "nsAutoPtr.h"
-#include "nsPoint.h"
-
-#include "nsIDOMEventListener.h"
-#include "nsIBaseWindow.h"
-#include "mozIDOMWindow.h"
-
-#include "trayIToolkit.h"
-#include "trayPlatform.h"
-#include "nsIObserver.h"
-
-
-#define TRAYSERVICE_CONTRACTID "@tn123.ath.cx/trayservice;1"
-#define TRAYSERVICE_CLASSNAME  "TrayServiceImpl"
-
-namespace mintrayr {
-
-/**
- * Minimize on what actions
- */
-typedef enum _eMinimizeActions {
-  kTrayOnMinimize = (1 << 0),
-  kTrayOnClose = (1 << 1)
-} eMinimizeActions;
-
-/**
- * Helper for watch: Minimize a window if a configured for the action
- */
-bool DoMinimizeWindow(mozIDOMWindow *window, eMinimizeActions action);
-
-/**
- * Helper: Gets the base window
- */
-NS_IMETHODIMP GetBaseWindow(mozIDOMWindow *aWindow, nsIBaseWindow **aBaseWindow);
-
-/**
- * Helper: Dispatches a trusted event (i.e. chrome only)
- */
-NS_IMETHODIMP DispatchTrustedEvent(mozIDOMWindow *aWindow, const nsAString& aEventName);
-
-class TrayServiceImpl;
-
-/**
- * The implementation for trayITrayIcon
- */
-class TrayIconImpl final : public trayITrayIcon, nsIDOMEventListener {
-  friend class platform::Icon;
-
-private:
-  ~TrayIconImpl() {}
-  bool mIsMinimized;
-  nsCOMPtr<mozIDOMWindow> mWindow;
-
-  bool mCloseOnRestore;
-
-  bool mClosed;
-  TrayServiceImpl *mService;
-  nsAutoPtr<platform::Icon> mPlatformIcon;
-
-public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIDOMEVENTLISTENER
-  NS_DECL_TRAYITRAYICON
-
-  TrayIconImpl(TrayServiceImpl *aService)
-    : mIsMinimized(false),
-    mCloseOnRestore(false),
-    mClosed(false),
-    mService(aService)
-    {}
-
-  NS_IMETHOD Init(mozIDOMWindow *aWindow, bool aCloseOnRestore);
-  NS_IMETHOD DispatchMouseEvent(const nsAString& aEventName, PRUint16 aButton, nsPoint& pt, bool aCtrlKey, bool aAltKey, bool aShiftKey);
-  inline bool IsClosed() const { return mClosed; }
-};
-
-/**
- * The implementation for trayITrayService
- */
-class TrayServiceImpl final : public trayITrayService, nsIObserver {
-  friend class TrayIconImpl;
-public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIOBSERVER
-  NS_DECL_TRAYITRAYSERVICE
-
-  TrayServiceImpl();
-
-private:
-  nsCOMArray<trayITrayIcon> mIcons;
-  nsCOMArray<mozIDOMWindow> mWatches;
-
-private:
-  ~TrayServiceImpl();
-  void Destroy();
-
-  void UnwatchAll();
-
-  void CloseIcon(trayITrayIcon *aIcon);
-};
-
-} // namespace
-
-#endif
deleted file mode 100644
--- a/im/components/moz.build
+++ /dev/null
@@ -1,33 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += ['devtools']
-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-    DIRS += ['mintrayr']
-
-EXTRA_COMPONENTS += [
-    'contentHandler.js',
-    'contentHandler.manifest',
-    'ibCommandLineHandler.manifest',
-    'ibConvStatsService.js',
-    'ibConvStatsService.manifest',
-    'ibStatusCommandLineHandler.js',
-    'ibStatusCommandLineHandler.manifest',
-]
-
-EXTRA_PP_COMPONENTS += [
-    'ibCommandLineHandler.js',
-]
-
-if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
-    EXTRA_COMPONENTS += ['ibDockBadge.js', 'ibDockBadge.manifest']
-else:
-    EXTRA_COMPONENTS += ['profileMigrator.js', 'profileMigrator.manifest']
-
-XPIDL_SOURCES += [
-    'ibIConvStatsService.idl',
-]
-
-XPIDL_MODULE = 'instantbird'
deleted file mode 100644
--- a/im/components/profileMigrator.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-function InstantbirdProfileMigrator() { }
-
-InstantbirdProfileMigrator.prototype = {
-  import: function() {
-    var root = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
-                                                          .get("DefProfRt", Ci.nsIFile);
-    if (root.leafName == "Profiles")
-      root.leafName = "Instantbird";
-    else
-      root.append("instantbird");
-    var profilesIni = root.clone();
-    profilesIni.append("profiles.ini");
-    if (!profilesIni.exists())
-      return;
-
-    var parser = Cc["@mozilla.org/xpcom/ini-parser-factory;1"].getService(Ci.nsIINIParserFactory)
-                                                              .createINIParser(profilesIni);
-    var profileService = Cc["@mozilla.org/toolkit/profile-service;1"].getService(Ci.nsIToolkitProfileService);
-    profileService.startWithLastProfile = parser.getString("General", "StartWithLastProfile") == "1";
-
-    for (var i = 0; 1; ++i) {
-      var section = "Profile" + i;
-      var name;
-      try {
-        name = parser.getString(section, "Name");
-      } catch(e) {
-        break;
-      }
-      var isRelative = parser.getString(section, "IsRelative");
-      var path = parser.getString(section, "Path");
-      var prof;
-      if (isRelative == "1") {
-        prof = root.clone().QueryInterface(Ci.nsIFile);
-        prof.setRelativeDescriptor(root, path);
-      }
-      else {
-        prof = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
-                                              .initWithPath(path);
-      }
-      var currentProfile = profileService.createProfile(prof, null, name);
-
-      try {
-        if (parser.getString(section, "Default") == "1")
-          profileService.selectedProfile = currentProfile;
-      } catch(e) {}
-    }
-  },
-  migrate: function(aStartup) { },
-
-  classDescription: "Instantbird Profile Migrator",
-  classID: Components.ID("028ab7f2-5c83-4643-b846-09119c702faa"),
-  contractID: "@mozilla.org/toolkit/profile-migrator;1",
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIProfileMigrator])
-};
-
-var NSGetFactory =
-  XPCOMUtils.generateNSGetFactory([InstantbirdProfileMigrator]);
deleted file mode 100644
--- a/im/components/profileMigrator.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-component {028ab7f2-5c83-4643-b846-09119c702faa} profileMigrator.js
-contract @mozilla.org/toolkit/profile-migrator;1 {028ab7f2-5c83-4643-b846-09119c702faa}
deleted file mode 100644
--- a/im/config/mozconfigs/linux/mozconfig
+++ /dev/null
@@ -1,35 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-. $topsrcdir/build/unix/mozconfig.linux
-
-# If this isn't set, the symbol upload will happen without the API.
-unset SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE
-
-export MOZILLA_OFFICIAL=1
-mk_add_options MOZILLA_OFFICIAL=1
-
-export CFLAGS="-gdwarf-2 -Wno-sign-compare"
-export CXXFLAGS="-gdwarf-2"
-
-# For NSS symbols
-export MOZ_DEBUG_SYMBOLS=1
-ac_add_options --enable-debug-symbols="-gdwarf-2"
-
-mk_add_options MOZ_MAKE_FLAGS="-j4"
-
-# Disable webrender on Linux buildbot builders to avoid the Rust requirement
-# of libX11 version > 1.4.99.1 (see bug 1350011).
-ac_add_options --disable-webrender
-
-ac_add_options --with-ccache
-ac_add_options --enable-application=im
-# ac_add_options --enable-extensions=purple
-ac_add_options --enable-update-channel=nightly
-ac_add_options --enable-optimize
-ac_add_options --disable-debug
-
-if [ `date +%m%d` = 1031 -o `date +%m%d` = 1101 ]; then
-ac_add_options --with-branding=im/branding/halloween
-fi
deleted file mode 100644
--- a/im/config/mozconfigs/linux/mozconfig-release
+++ /dev/null
@@ -1,34 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-. $topsrcdir/build/unix/mozconfig.linux
-
-# If this isn't set, the symbol upload will happen without the API.
-unset SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE
-
-export MOZILLA_OFFICIAL=1
-mk_add_options MOZILLA_OFFICIAL=1
-
-export CFLAGS="-gdwarf-2 -Wno-sign-compare"
-export CXXFLAGS="-gdwarf-2"
-
-# For NSS symbols
-export MOZ_DEBUG_SYMBOLS=1
-ac_add_options --enable-debug-symbols="-gdwarf-2"
-
-mk_add_options MOZ_MAKE_FLAGS="-j4"
-
-# Disable webrender on Linux buildbot builders to avoid the Rust requirement
-# of libX11 version > 1.4.99.1 (see bug 1350011).
-ac_add_options --disable-webrender
-
-ac_add_options --with-ccache
-ac_add_options --enable-application=im
-ac_add_options --enable-extensions=purple
-ac_add_options --enable-update-channel=release
-ac_add_options --enable-optimize
-ac_add_options --disable-debug
-
-ac_add_options --enable-official-branding
-ac_add_options --with-l10n-base=..
deleted file mode 100644
--- a/im/config/mozconfigs/macosx/mozconfig
+++ /dev/null
@@ -1,33 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-. $topsrcdir/build/macosx/universal/mozconfig
-
-export MOZ_PKG_PLATFORM=mac
-
-# If this isn't set, the symbol upload will happen without the API.
-unset SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE
-
-# Needed to enable breakpad in application.ini
-export MOZILLA_OFFICIAL=1
-
-# export CFLAGS="-gdwarf-2 -W -Wno-unused-parameter -Wno-sign-compare"
-# export CXXFLAGS="-gdwarf-2 -W -Wno-unused-parameter -Wno-missing-field-initializers"
-
-# For NSS symbols
-# export MOZ_DEBUG_SYMBOLS=1
-# ac_add_options --enable-debug-symbols="-gdwarf-2"
-
-# Enable parallel compiling
-mk_add_options MOZ_MAKE_FLAGS="-sj10"
-
-ac_add_options --enable-application=im
-# ac_add_options --enable-extensions=purple
-ac_add_options --enable-update-channel=nightly
-ac_add_options --enable-optimize
-ac_add_options --disable-debug
-
-if [ `date +%m%d` = 1031 -o `date +%m%d` = 1101 ]; then
-ac_add_options --with-branding=im/branding/halloween
-fi
deleted file mode 100644
--- a/im/config/mozconfigs/macosx/mozconfig-release
+++ /dev/null
@@ -1,32 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-mk_add_options MOZ_BUILD_PROJECTS="x86_64 i386"
-. $topsrcdir/build/macosx/universal/mozconfig.common
-export MOZ_PKG_PLATFORM=mac
-
-# If this isn't set, the symbol upload will happen without the API.
-unset SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE
-
-# Needed to enable breakpad in application.ini
-export MOZILLA_OFFICIAL=1
-
-export CFLAGS="-gdwarf-2 -W -Wno-unused-parameter -Wno-sign-compare"
-export CXXFLAGS="-gdwarf-2 -W -Wno-unused-parameter -Wno-missing-field-initializers"
-
-# For NSS symbols
-export MOZ_DEBUG_SYMBOLS=1
-ac_add_options --enable-debug-symbols="-gdwarf-2"
-
-# Enable parallel compiling
-mk_add_options MOZ_MAKE_FLAGS="-sj10"
-
-ac_add_options --enable-application=im
-ac_add_options --enable-extensions=purple
-ac_add_options --enable-update-channel=release
-ac_add_options --enable-optimize
-ac_add_options --disable-debug
-
-ac_add_options --enable-official-branding
-ac_add_options --with-l10n-base=..
deleted file mode 100644
--- a/im/config/mozconfigs/win32/mozconfig
+++ /dev/null
@@ -1,23 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-export WIN32_REDIST_DIR=$VCINSTALLDIR'redist\x86\Microsoft.VC'$MOZ_MSVCVERSION'0.CRT'
-
-export MOZILLA_OFFICIAL=1
-
-# For NSS symbols
-export MOZ_DEBUG_SYMBOLS=1
-
-ac_add_options --enable-application=im
-# ac_add_options --enable-extensions=purple
-ac_add_options --enable-update-channel=nightly
-ac_add_options --enable-optimize
-ac_add_options --disable-debug
-# The Windows 8 SDK is required for gamepad support.
-ac_add_options --disable-gamepad
-ac_add_options --enable-jemalloc
-
-if [ `date +%m%d` = 1031 -o `date +%m%d` = 1101 ]; then
-ac_add_options --with-branding=im/branding/halloween
-fi
deleted file mode 100644
--- a/im/config/mozconfigs/win32/mozconfig-release
+++ /dev/null
@@ -1,21 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-export WIN32_REDIST_DIR=$VCINSTALLDIR'redist\x86\Microsoft.VC'$MOZ_MSVCVERSION'0.CRT'
-
-export MOZILLA_OFFICIAL=1
-
-# For NSS symbols
-export MOZ_DEBUG_SYMBOLS=1
-
-ac_add_options --enable-application=im
-ac_add_options --enable-extensions=purple
-ac_add_options --enable-update-channel=release
-ac_add_options --enable-optimize
-ac_add_options --disable-debug
-# The Windows 8 SDK is required for gamepad support.
-ac_add_options --disable-gamepad
-ac_add_options --enable-jemalloc
-ac_add_options --enable-official-branding
-ac_add_options --with-l10n-base=..
deleted file mode 100644
--- a/im/config/version.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-1.6a1pre
deleted file mode 100644
--- a/im/configure.in
+++ /dev/null
@@ -1,28 +0,0 @@
-dnl -*- Mode: Autoconf; tab-width: 2; indent-tabs-mode: nil; -*-
-dnl vi: set tabstop=2 shiftwidth=2 expandtab:
-dnl This Source Code Form is subject to the terms of the Mozilla Public
-dnl License, v. 2.0. If a copy of the MPL was not distributed with this
-dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-dnl Things we need to carry from confvars.sh
-AC_SUBST(INSTANTBIRD_VERSION)
-
-dnl More things we need to carry from confvars.sh
-AC_SUBST(moztopsrcdir)
-AC_SUBST(commtopsrcdir)
-AC_SUBST(mozreltopsrcdir)
-AC_SUBST(commreltopsrcdir)
-
-if test `echo "$MOZ_EXTENSIONS" | grep -c purple` -ne 0; then
-    MOZ_PURPLE=1
-    AC_SUBST(MOZ_PURPLE)
-fi
-
-if test -n "$MOZ_PURPLE"; then
-  tmpscript=`$PYTHON -c 'import os, tempfile; print tempfile.mktemp(prefix="subscript.").replace(os.sep, "/")'` || exit 1
-  m4 "${srcdir}/build/autoconf/subconfigure.m4" \
-   "${srcdir}/build/autoconf/altoptions.m4" \
-   "${srcdir}/extensions/purple/configure.in" > $tmpscript
-  . $tmpscript
-  rm -f $tmpscript
-fi
deleted file mode 100644
--- a/im/confvars.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-. ${_topsrcdir}/$MOZ_BUILD_APP/../comm-confvars.sh
-
-MOZ_APP_BASENAME=Instantbird
-MOZ_APP_NAME=instantbird
-MOZ_APP_STATIC_INI=1
-MOZ_XUL_APP=1
-MOZ_ENABLE_LIBXUL=1
-MOZ_DISABLE_EXPORT_JS=1
-MOZ_UPDATER=1
-MOZ_MATHML=
-MOZ_BINARY_EXTENSIONS=1
-
-MOZ_APP_VERSION_TXT=${_topsrcdir}/$MOZ_BUILD_APP/config/version.txt
-MOZ_APP_VERSION=`cat $MOZ_APP_VERSION_TXT`
-INSTANTBIRD_VERSION=$MOZ_APP_VERSION
-
-MOZ_BRANDING_DIRECTORY=$commreltopsrcdir/im/branding/nightly
-MOZ_OFFICIAL_BRANDING_DIRECTORY=$commreltopsrcdir/other-licenses/branding/instantbird
-
-MOZ_APP_ID={33cb9019-c295-46dd-be21-8c4936574bee}
-# Enable generational GC on desktop.
-JSGC_GENERATIONAL=1
-NSS_EXTRA_SYMBOLS_FILE=../../chat/nss-purple.symbols
-
-MOZ_DEVTOOLS=all
deleted file mode 100644
--- a/im/content/aboutDialog.css
+++ /dev/null
@@ -1,66 +0,0 @@
-#aboutDialog {
-  padding: 0px 0px 10px 0px;
-}
-
-#modes {
-  min-height: 380px;
-}
-
-#clientBox {
-  background-color: #FFFFFF;
-  background-image: url("chrome://branding/content/about.png");
-  background-repeat: no-repeat;
-  padding-top: 220px;
-  color: #000000;
-}
-
-#versionWrapper {
-  margin: 0px 0px 3px 20px;
-}
-
-#versionField {
-  background-color: #FFFFFF;
-  -moz-appearance: none;
-  border: none;
-  font-weight: bold;
-  color: #909090;
-}
-
-#geckoVersionField,
-#libpurpleVersionField {
-  background-color: #FFFFFF;
-  -moz-appearance: none;
-  border: none;
-  color: #909090;
-  padding-top: 3px !important;
-  padding-left: 10px !important;
-}
-
-#copyright {
-  margin: 10px 20px 3px 20px;
-}
-
-#userAgentField {
-  margin: 0px 0px 3px 20px !important;
-  background-color: #FFFFFF;
-  -moz-appearance: none;
-  border: none;
-}
-
-#groove {
-  margin-top: 0px;
-}
-
-#creditsIframe {
-   cursor: default;
-   -moz-user-select: none;
-}
-
-button[dlgtype="extra2"] {
-  margin-left: 13px;
-}
-
-button[dlgtype="accept"] {
-  margin-right: 13px;
-}
-
deleted file mode 100644
--- a/im/content/aboutDialog.xul
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0"?> <!-- -*- Mode: HTML -*- -->
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/aboutDialog.css" type="text/css"?>
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-#endif
-
-<!DOCTYPE window [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
-%brandDTD;
-<!ENTITY % aboutDialogDTD SYSTEM "chrome://instantbird/locale/aboutDialog.dtd" >
-%aboutDialogDTD;
-<!ENTITY copyrightYear "2015">
-#ifdef XP_MACOSX
- <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
- %instantbirdDTD;
-#endif
-]>
-
-<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        id="aboutDialog"
-        windowtype="Messenger:About"
-        buttons="accept,extra2"
-        onload="onLoad();"
-        title="&aboutDialog.title;" creditslabel="&credits.label;" creditsaccesskey="&credits.accesskey;"
-        aboutlabel="&aboutLink.label;" aboutaccesskey="&aboutLink.accesskey;" versionlabel="&aboutVersion;"
-        style="width: 299px; height: 330px;">
-
-#ifdef XP_MACOSX
-#include menus.xul.inc
-#endif
-
-    <script type="application/javascript">
-      <![CDATA[
-        var gSelectedPage;
-
-        function onLoad() {
-          var xai = Cc["@mozilla.org/xre/app-info;1"]
-                      .getService(Ci.nsIXULAppInfo);
-
-          var versionField = document.getElementById("versionField");
-          versionField.value = versionField.value + xai.version
-                             + ' (' + xai.appBuildID + ')';
-
-          versionField = document.getElementById("geckoVersionField");
-          versionField.value = versionField.value + xai.platformVersion
-                             + ' (' + xai.platformBuildID + ')';
-
-          versionField = document.getElementById("libpurpleVersionField");
-          if ("@instantbird.org/libpurple/core;1" in Cc) {
-            var pcs = Cc["@instantbird.org/libpurple/core;1"]
-                        .getService(Ci.purpleICoreService);
-            versionField.value = versionField.value + pcs.version;
-          }
-          else {
-            versionField.hidden = true;
-          }
-
-          versionField = document.getElementById("userAgentField");
-          versionField.value = navigator.userAgent;
-
-          var button = document.documentElement.getButton("extra2");
-          button.setAttribute("label", document.documentElement.getAttribute("creditslabel"));
-          button.setAttribute("accesskey", document.documentElement.getAttribute("creditsaccesskey"));
-          gSelectedPage = 0;
-          button.addEventListener("command", switchPage);
-          document.documentElement.getButton("accept").focus();
-        }
-
-        function uninit(aEvent)
-        {
-          if (aEvent.target != document)
-            return;
-          var iframe = document.getElementById("creditsIframe");
-          iframe.setAttribute("src", "");
-        }
-
-        function switchPage(aEvent)
-        {
-          var button = aEvent.target;
-          if (button.localName != "button")
-            return;
-
-          var iframe = document.getElementById("creditsIframe");
-          if (gSelectedPage == 0) {
-            iframe.setAttribute("src", "chrome://instantbird/content/credits.xhtml");
-            button.setAttribute("label", document.documentElement.getAttribute("aboutlabel"));
-            button.setAttribute("accesskey", document.documentElement.getAttribute("aboutaccesskey"));
-            gSelectedPage = 1;
-          }
-          else {
-            iframe.setAttribute("src", "");
-            button.setAttribute("label", document.documentElement.getAttribute("creditslabel"));
-            button.setAttribute("accesskey", document.documentElement.getAttribute("creditsaccesskey"));
-            gSelectedPage = 0;
-          }
-          var modes = document.getElementById("modes");
-          modes.setAttribute("selectedIndex", gSelectedPage);
-        }
-      ]]>
-    </script>
-
-    <deck id="modes" flex="1">
-      <vbox flex="1" id="clientBox">
-        <vbox id="versionWrapper" flex="1">
-          <textbox id="versionField" readonly="true" class="plain" tabindex="2"
-                   value="&aboutVersion; "/>
-          <textbox id="geckoVersionField" readonly="true" class="plain"
-                   tabindex="3" value="&geckoVersion; "/>
-          <textbox id="libpurpleVersionField" readonly="true" class="plain"
-                   tabindex="4" value="&libpurpleVersion; "/>
-        </vbox>
-        <description id="copyright" flex="1">&copyrightText2;</description>
-        <separator/>
-        <textbox id="userAgentField" readonly="true" class="plain"
-                 tabindex="5" multiline="true"/>
-      </vbox>
-
-      <vbox flex="1" id="creditsBox">
-        <iframe id="creditsIframe" flex="1"/>
-      </vbox>
-    </deck>
-
-    <separator class="groove" id="groove"/>
-
-</dialog>
deleted file mode 100644
--- a/im/content/aboutPanel.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<bindings id="aboutPanelBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="aboutPanel">
-    <content flex="1">
-      <xul:vbox flex="1">
-        <xul:browser anonid="aboutBrowser" disablehistory="true" type="content"
-                     flex="1" tooltip="imTooltip"/>
-      </xul:vbox>
-    </content>
-
-    <implementation>
-      <method name="showAboutPage">
-        <parameter name="aPage"/>
-        <body>
-        <![CDATA[
-          let url = aPage.startsWith("about:") ? aPage : "about:" + aPage;
-          this.browser.loadURI(url);
-        ]]>
-        </body>
-      </method>
-
-      <method name="refreshTitle">
-        <body>
-        <![CDATA[
-          let browser = this.browser;
-          this.tab.setAttribute("label",
-            browser.contentTitle.replace(/\0/g, "") || browser.currentURI.spec);
-          if (browser.currentURI.spec == "about:addons") {
-            // Set the tab type to "addons" so that CSS will set its favicon.
-            this.tab.setAttribute("type", "addons");
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="finishImport">
-        <parameter name="aAboutPanel"/>
-        <body>
-        <![CDATA[
-          this.browser.swapDocShells(aAboutPanel.browser);
-          this.refreshTitle();
-        ]]>
-        </body>
-      </method>
-
-      <property name="browser" readonly="true">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "aboutBrowser");
-        </getter>
-      </property>
-
-      <constructor>
-      <![CDATA[
-        this.browser.addEventListener("DOMTitleChanged", this.refreshTitle.bind(this));
-        // The addon manager does its own link handling using window.open().
-        // We need to override this method to open http links externally.
-        let win = this.browser.contentWindow;
-        let open = win.open;
-        win.open = function(aUrl) {
-          let uri = Services.io.newURI(aUrl);
-          if (!uri.schemeIs("http") && !uri.schemeIs("https")) {
-            open.apply(this, arguments);
-          }
-          else {
-            Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-              .getService(Ci.nsIExternalProtocolService).loadURI(uri);
-          }
-        }
-      ]]>
-      </constructor>
-    </implementation>
-
-    <handlers>
-      <handler event="click">
-      <![CDATA[
-        // We only handle middle clicks. We don't handle the addon manager.
-        if (event.button != 1 || this.browser.currentURI.spec == "about:addons")
-          return;
-
-        // The event target may be a descendant of the actual link.
-        let url;
-        for (let elem = event.target; elem; elem = elem.parentNode) {
-          if (elem instanceof HTMLAnchorElement) {
-            url = elem.href;
-            if (url)
-              break;
-          }
-        }
-        if (!url)
-          return;
-        event.stopPropagation();
-        event.preventDefault();
-
-        // If it's an about page, open it.
-        if (url.startsWith("about:")) {
-          let panel = document.createElementNS(
-            "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-            "aboutPanel");
-          // addPanel will return null if the window can't accept new tabs.
-          if (window.getTabBrowser().addPanel(panel)) {
-            panel.showAboutPage(url);
-            return;
-          }
-          // If we couldn't add a new tab, load the page in this one.
-          this.showAboutPage(url);
-          return;
-        }
-        // Otherwise open in default browser.
-        // loadURI can throw if the default browser is misconfigured.
-        Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-          .getService(Ci.nsIExternalProtocolService)
-          .loadURI(Services.io.newURI(url));
-      ]]>
-      </handler>
-    </handlers>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/account.js
+++ /dev/null
@@ -1,242 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-var autoJoinPref = "autoJoin";
-
-var account = {
-  onload: function account_onload() {
-    this.account = window.arguments[0];
-    this.proto = this.account.protocol;
-    document.getElementById("accountName").value = this.account.name;
-    document.getElementById("protocolName").value = this.proto.name || this.proto.id;
-    document.getElementById("protocolIcon").src =
-      this.proto.iconBaseURI + "icon48.png";
-
-    let passwordBox = document.getElementById("passwordBox");
-    if (this.proto.noPassword)
-      passwordBox.hidden = true;
-    else {
-      try {
-        // Will throw if we don't have a protocol plugin for the account.
-        document.getElementById("password").value = this.account.password;
-      } catch (e) {
-        passwordBox.hidden = true;
-      }
-    }
-
-    document.getElementById("alias").value = this.account.alias;
-
-    let protoId = this.proto.id;
-    if (protoId == "prpl-irc" || protoId == "prpl-jabber" ||
-        protoId == "prpl-gtalk") {
-      document.getElementById("optionalSeparator").hidden = false;
-      document.getElementById("autojoinBox").hidden = false;
-      var branch = Services.prefs.getBranch("messenger.account." +
-                                            this.account.id + ".");
-      if (branch.prefHasUserValue(autoJoinPref)) {
-        document.getElementById("autojoin").value =
-          branch.getStringPref(autoJoinPref);
-      }
-    }
-
-/* FIXME
-    document.getElementById("newMailNotification").hidden =
-      !this.proto.newMailNotification;
-*/
-
-    this.prefs = Services.prefs.getBranch("messenger.account." +
-                                          this.account.id + ".options.");
-    this.populateProtoSpecificBox();
-
-    let proxyVisible = this.proto.usePurpleProxy;
-    if (proxyVisible) {
-      this.proxy = this.account.proxyInfo;
-      this.displayProxyDescription();
-    }
-    document.getElementById("proxyBox").hidden = !proxyVisible;
-    document.getElementById("proxySeparator").hidden = !proxyVisible;
-
-    Services.obs.addObserver(this, "prpl-quit");
-    window.addEventListener("unload", this.unload);
-  },
-  unload: function account_unload() {
-    Services.obs.removeObserver(account, "prpl-quit");
-  },
-  observe: function account_observe(aObject, aTopic, aData) {
-    if (aTopic == "prpl-quit") {
-      // libpurple is being uninitialized. Close this dialog.
-      window.close();
-    }
-  },
-
-  displayProxyDescription: function account_displayProxyDescription() {
-    var type = this.proxy.type;
-    var bundle = document.getElementById("proxiesBundle");
-    var proxy;
-    var result;
-    if (type == Ci.purpleIProxyInfo.useGlobal) {
-      proxy = Cc["@instantbird.org/libpurple/core;1"]
-              .getService(Ci.purpleICoreService).globalProxy;
-      type = proxy.type;
-    }
-    else
-      proxy = this.proxy;
-
-    if (type == Ci.purpleIProxyInfo.noProxy)
-      result = bundle.getString("proxies.directConnection");
-
-    if (type == Ci.purpleIProxyInfo.useEnvVar)
-      result = bundle.getString("proxies.useEnvironment");
-
-    if (!result) {
-      // At this point, we should have either a socks or http proxy
-      if (type == Ci.purpleIProxyInfo.httpProxy)
-        result = bundle.getString("proxies.http");
-      else if (type == Ci.purpleIProxyInfo.socks4Proxy)
-        result = bundle.getString("proxies.socks4");
-      else if (type == Ci.purpleIProxyInfo.socks5Proxy)
-        result = bundle.getString("proxies.socks5");
-      else
-        throw "Unknown proxy type";
-
-      if (result)
-        result += " ";
-
-      if (proxy.username)
-        result += proxy.username + "@";
-
-      result += proxy.host + ":" + proxy.port;
-    }
-
-    document.getElementById("proxyDescription").textContent = result;
-  },
-
-  getBool: function account_getBool(aOpt) {
-    if (this.prefs.prefHasUserValue(aOpt.name))
-      return this.prefs.getBoolPref(aOpt.name);
-
-    return aOpt.getBool();
-  },
-
-  getInt: function account_getInt(aOpt) {
-    if (this.prefs.prefHasUserValue(aOpt.name))
-      return this.prefs.getIntPref(aOpt.name);
-
-    return aOpt.getInt();
-  },
-
-  getString: function account_getString(aOpt) {
-    if (this.prefs.prefHasUserValue(aOpt.name))
-      return this.prefs.getStringPref(aOpt.name);
-
-    return aOpt.getString();
-  },
-
-  getListValue: function account_getListValue(aOpt) {
-    if (this.prefs.prefHasUserValue(aOpt.name))
-      return this.prefs.getCharPref(aOpt.name);
-
-    return aOpt.getListDefault();
-  },
-
-  populateProtoSpecificBox: function account_populate() {
-    let haveOptions =
-      accountOptionsHelper.addOptions(this.proto.id + "-",
-                                      this.getProtoOptions(), null);
-    document.getElementById("advancedTab").hidden = !haveOptions;
-  },
-
-  getValue: function account_getValue(aId) {
-    var elt = document.getElementById(aId);
-    if ("checked" in elt)
-      return elt.checked;
-    return elt.value;
-  },
-
-  save: function account_save() {
-    if (!this.proto.noPassword &&
-        !document.getElementById("passwordBox").hidden) {
-      var password = this.getValue("password");
-      if (password != this.account.password)
-        this.account.password = password;
-    }
-
-    var alias = this.getValue("alias");
-    if (alias != this.account.alias)
-      this.account.alias = alias;
-
-    let protoId = this.proto.id;
-    if (protoId == "prpl-irc" || protoId == "prpl-jabber" ||
-        protoId == "prpl-gtalk") {
-      var branch = Services.prefs.getBranch("messenger.account." +
-                                            this.account.id + ".");
-      var autojoin = this.getValue("autojoin");
-      if (autojoin || branch.prefHasUserValue(autoJoinPref)) {
-        branch.setStringPref(autoJoinPref, autojoin);
-      }
-    }
-
-    if (this.proto.usePurpleProxy &&
-        this.account.proxyInfo.key != this.proxy.key)
-      this.account.proxyInfo = this.proxy;
-
-    for (let opt of this.getProtoOptions()) {
-      var name = this.proto.id + "-" + opt.name;
-      var val = this.getValue(name);
-      switch (opt.type) {
-      case Ci.prplIPref.typeBool:
-        if (val != opt.getBool())
-          this.account.setBool(opt.name, val);
-        break;
-      case Ci.prplIPref.typeInt:
-        if (val != opt.getInt())
-          this.account.setInt(opt.name, val);
-        break;
-      case Ci.prplIPref.typeString:
-        if (val != opt.getString())
-          this.account.setString(opt.name, val);
-        break;
-      case Ci.prplIPref.typeList:
-        if (val != opt.getListDefault())
-          this.account.setString(opt.name, val);
-        break;
-      default:
-        throw "unknown preference type " + opt.type;
-      }
-    }
-  },
-
-  getProtoOptions: function* account_getProtoOptions() {
-    let options = this.proto.getOptions();
-    while (options.hasMoreElements()) {
-      let opt = options.getNext();
-      let returnOpt = {
-        get name() { return opt.name; },
-        get label() { return opt.label; },
-        get type() { return opt.type; },
-        get masked() { return opt.masked; },
-
-        // Override these to use user's preference values instead of
-        // the default value where available.
-        getBool: () => this.getBool(opt),
-        getInt: () => this.getInt(opt),
-        getString: () => this.getString(opt),
-        getListDefault: () => this.getListValue(opt),
-
-        getList: () => opt.getList()
-      };
-      yield returnOpt;
-    }
-  },
-
-  openProxySettings: function account_openProxySettings() {
-    window.openDialog("chrome://instantbird/content/proxies.xul", "",
-                      "chrome,modal,titlebar,centerscreen",
-                      this);
-    this.displayProxyDescription();
-  }
-};
deleted file mode 100644
--- a/im/content/account.xul
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<!DOCTYPE window SYSTEM "chrome://instantbird/locale/account.dtd">
-
-<dialog
-  id     = "account"
-  title  = "&accountWindow.title;"
-  buttons= "accept,cancel"
-  width  = "&accountWindow.width;"
-  height = "400"
-  xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-  onload = "account.onload()"
-  ondialogaccept="account.save()">
-  <script type="application/javascript" src="chrome://chat/content/imAccountOptionsHelper.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/account.js"/>
-
-  <stringbundle id="proxiesBundle" src="chrome://instantbird/locale/proxies.properties"/>
-
-  <hbox>
-    <image id="protocolIcon"/>
-    <vbox flex="1">
-      <label id="accountName" crop="end" class="header"/>
-      <label id="protocolName"/>
-    </vbox>
-  </hbox>
-  <separator/>
-
-  <tabbox flex="1">
-    <tabs id="tabs">
-      <tab id="generalTab" label="&account.general;"/>
-      <tab id="advancedTab" label="&account.advanced;"/>
-    </tabs>
-    <tabpanels id="panels" flex="1">
-      <tabpanel orient="vertical" flex="1" style="overflow:auto;">
-        <hbox id="passwordBox" equalsize="always" align="baseline">
-          <label value="&account.password;" control="password" flex="1"/>
-          <textbox id="password" flex="1" type="password"/>
-        </hbox>
-
-        <separator class="groove"/>
-
-        <hbox id="aliasBox" equalsize="always" align="baseline">
-          <label value="&account.alias;" control="alias" flex="1"/>
-          <textbox id="alias" flex="1"/>
-        </hbox>
-
-        <separator class="groove" hidden="true" id="optionalSeparator"/>
-
-        <checkbox id="newMailNotification" label="&account.newMailNotification;" hidden="true"/>
-
-        <vbox id="autojoinBox" hidden="true">
-          <label value="&account.autojoin;" control="autojoin" flex="1"/>
-          <textbox id="autojoin" flex="1"/>
-        </vbox>
-
-        <separator class="groove" id="proxySeparator"/>
-        <vbox id="proxyBox">
-          <label value="&account.proxySettings.caption;" flex="1"/>
-          <description id="proxyDescription"/>
-          <hbox>
-            <spacer flex="1"/>
-            <button id="proxySettings"
-                    label="&account.proxySettings.change.label;"
-                    accesskey="&account.proxySettings.change.accessKey;"
-                    oncommand="account.openProxySettings();"/>
-          </hbox>
-        </vbox>
-      </tabpanel>
-
-      <tabpanel id="advanced" flex="1" style="overflow:auto;">
-        <grid flex="1">
-          <columns>
-            <column id="label-column" flex="1"/>
-            <column id="value-column" flex="1"/>
-          </columns>
-          <rows id="protoSpecific"/>
-        </grid>
-      </tabpanel>
-
-    </tabpanels>
-  </tabbox>
-</dialog>
deleted file mode 100644
--- a/im/content/accountWizard.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.top-protocol {
-  -moz-binding: url("chrome://instantbird/content/accountWizard.xml#topProtocol");
-}
deleted file mode 100644
--- a/im/content/accountWizard.js
+++ /dev/null
@@ -1,526 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-ChromeUtils.import("resource:///modules/imServices.jsm");
-
-var PREF_EXTENSIONS_GETMOREPROTOCOLSURL = "extensions.getMoreProtocolsURL";
-
-var accountWizard = {
-  onload: function aw_onload() {
-    let topProtoList = document.getElementById("topprotolist");
-    let bundle = document.getElementById("topProtocolsBundle");
-    let topProtocols = bundle.getString("topProtocol.list").split(",");
-
-    for (let topProto of topProtocols) {
-      let proto = Services.core.getProtocolById(topProto);
-      if (proto == null)
-        continue;
-
-      // If the preference is set to disable this prpl, don't show it in the
-      // full list of protocols.
-      let pref = "chat.prpls." + topProto + ".disable";
-      if (Services.prefs.getPrefType(pref) == Services.prefs.PREF_BOOL &&
-          Services.prefs.getBoolPref(pref))
-        continue;
-
-      let item = document.createElement("richlistitem");
-      item.className = "top-protocol";
-      topProtoList.insertBefore(item, document.getElementById("otherListItem"));
-      let desc = bundle.getString("topProtocol." + proto.id + ".description");
-      item.build(proto, desc);
-    }
-
-    if (topProtoList.itemCount < 2)
-      document.getElementById("accountWizard").currentPage = "accountprotocol";
-
-    topProtoList.selectedIndex = -1;
-
-    Services.obs.addObserver(this, "prpl-quit");
-    window.addEventListener("unload", this.unload);
-  },
-  unload: function aw_unload() {
-    Services.obs.removeObserver(accountWizard, "prpl-quit");
-  },
-  observe: function am_observe(aObject, aTopic, aData) {
-    if (aTopic == "prpl-quit") {
-      // libpurple is being uninitialized. We can't create any new
-      // account so keeping this wizard open would be pointless, close it.
-      window.close();
-    }
-  },
-
-  getUsername: function aw_getUsername() {
-    // If the first username textbox is empty, make sure we return an empty
-    // string so that it blocks the 'next' button of the wizard.
-    if (!this.userNameBoxes[0].value)
-      return "";
-
-    return this.userNameBoxes.reduce((prev, elt) => prev + elt.value, "");
-  },
-
-  checkUsername: function aw_checkUsername() {
-    let wizard = document.getElementById("accountWizard");
-    let name = accountWizard.getUsername();
-    let duplicateWarning = document.getElementById("duplicateAccount");
-    if (!name) {
-      wizard.canAdvance = false;
-      duplicateWarning.hidden = true;
-      return;
-    }
-
-    let exists = accountWizard.proto.accountExists(name);
-    wizard.canAdvance = !exists;
-    duplicateWarning.hidden = !exists;
-  },
-
-  selectProtocol: function aw_selectProtocol() {
-    // A fix for users wanting to return to the list they previously viewed.
-    let pageId = document.getElementById("accountWizard").currentPage.pageid;
-    document.getElementById("accountusername").previous = pageId;
-
-    let listId = pageId == "accounttoplist" ? "topprotolist" : "protolist";
-    let protoList = document.getElementById(listId);
-    this.proto = Services.core.getProtocolById(protoList.selectedItem.value);
-
-    return true;
-  },
-
-  insertUsernameField: function aw_insertUsernameField(aName, aLabel, aParent,
-                                                       aDefaultValue) {
-    let hbox = document.createElement("hbox");
-    hbox.setAttribute("id", aName + "-hbox");
-    hbox.setAttribute("align", "baseline");
-    hbox.setAttribute("equalsize", "always");
-
-    let label = document.createElement("label");
-    label.setAttribute("value", aLabel);
-    label.setAttribute("control", aName);
-    label.setAttribute("id", aName + "-label");
-    hbox.appendChild(label);
-
-    let textbox = document.createElement("textbox");
-    textbox.setAttribute("id", aName);
-    textbox.setAttribute("flex", 1);
-    if (aDefaultValue)
-      textbox.setAttribute("value", aDefaultValue);
-    textbox.addEventListener("input", accountWizard.checkUsername);
-    hbox.appendChild(textbox);
-
-    aParent.appendChild(hbox);
-    return textbox;
-  },
-
-  showUsernamePage: function aw_showUsernamePage() {
-    let proto = this.proto.id;
-    if ("userNameBoxes" in this && this.userNameProto == proto) {
-      this.checkUsername();
-      return;
-    }
-
-    let bundle = document.getElementById("accountsBundle");
-    let usernameInfo;
-    let emptyText = this.proto.usernameEmptyText;
-    if (emptyText) {
-      usernameInfo =
-        bundle.getFormattedString("accountUsernameInfoWithDescription",
-                                  [emptyText, this.proto.name]);
-    }
-    else {
-      usernameInfo =
-        bundle.getFormattedString("accountUsernameInfo", [this.proto.name]);
-    }
-    document.getElementById("usernameInfo").textContent = usernameInfo;
-
-    let vbox = document.getElementById("userNameBox");
-    // remove anything that may be there for another protocol
-    let child;
-    while (vbox.hasChildNodes())
-      vbox.lastChild.remove();
-
-    let splits = [];
-    for (let split of this.getProtoUserSplits())
-      splits.push(split);
-
-    let label = bundle.getString("accountUsername");
-    this.userNameBoxes = [this.insertUsernameField("name", label, vbox)];
-    this.userNameBoxes[0].emptyText = emptyText;
-
-    for (let i = 0; i < splits.length; ++i) {
-      this.userNameBoxes.push({value: splits[i].separator});
-      label = bundle.getFormattedString("accountColon", [splits[i].label]);
-      let defaultVal = splits[i].defaultValue;
-      this.userNameBoxes.push(this.insertUsernameField("username-split-" + i,
-                                                       label, vbox,
-                                                       defaultVal));
-    }
-    this.userNameBoxes[0].focus();
-    this.userNameProto = proto;
-    this.checkUsername();
-  },
-
-  hideUsernamePage: function aw_hideUsernamePage() {
-    document.getElementById("accountWizard").canAdvance = true;
-    let next = "account" +
-      (this.proto.noPassword ? "advanced" : "password");
-    document.getElementById("accountusername").next = next;
-  },
-
-  showAdvanced: function aw_showAdvanced() {
-    // ensure we don't destroy user data if it's not necessary
-    let id = this.proto.id;
-    if ("protoSpecOptId" in this && this.protoSpecOptId == id)
-      return;
-    this.protoSpecOptId = id;
-
-/* FIXME
-    document.getElementById("newMailNotification").hidden =
-      !this.proto.newMailNotification;
-*/
-    this.populateProtoSpecificBox();
-
-    let proxyVisible = this.proto.usePurpleProxy;
-    if (proxyVisible) {
-      this.proxy = Cc["@instantbird.org/purple/proxyinfo;1"]
-                     .createInstance(Ci.purpleIProxyInfo);
-      this.proxy.type = Ci.purpleIProxyInfo.useGlobal;
-      this.displayProxyDescription();
-    }
-    document.getElementById("proxyGroupbox").hidden = !proxyVisible;
-
-    let alias = document.getElementById("alias");
-    alias.focus();
-  },
-
-  displayProxyDescription: function aw_displayProxyDescription() {
-    let type = this.proxy.type;
-    let bundle = document.getElementById("proxiesBundle");
-    let proxy;
-    let result;
-    if (type == Ci.purpleIProxyInfo.useGlobal) {
-      proxy = Cc["@instantbird.org/libpurple/core;1"]
-              .getService(Ci.purpleICoreService).globalProxy;
-      type = proxy.type;
-    }
-    else
-      proxy = this.proxy;
-
-    if (type == Ci.purpleIProxyInfo.noProxy)
-      result = bundle.getString("proxies.directConnection");
-
-    if (type == Ci.purpleIProxyInfo.useEnvVar)
-      result = bundle.getString("proxies.useEnvironment");
-
-    if (!result) {
-      // At this point, we should have either a socks or http proxy
-      if (type == Ci.purpleIProxyInfo.httpProxy)
-        result = bundle.getString("proxies.http");
-      else if (type == Ci.purpleIProxyInfo.socks4Proxy)
-        result = bundle.getString("proxies.socks4");
-      else if (type == Ci.purpleIProxyInfo.socks5Proxy)
-        result = bundle.getString("proxies.socks5");
-      else
-        throw "Unknown proxy type";
-
-      if (result)
-        result += " ";
-
-      if (proxy.username)
-        result += proxy.username + "@";
-
-      result += proxy.host + ":" + proxy.port;
-    }
-
-    document.getElementById("proxyDescription").textContent = result;
-  },
-
-  populateProtoSpecificBox: function aw_populate() {
-    let haveOptions =
-      accountOptionsHelper.addOptions(this.proto.id + "-", this.getProtoOptions());
-    document.getElementById("protoSpecificGroupbox").hidden = !haveOptions;
-    if (haveOptions) {
-      let bundle = document.getElementById("accountsBundle");
-      document.getElementById("protoSpecificCaption").label =
-        bundle.getFormattedString("protoOptions", [this.proto.name]);
-    }
-  },
-
-  createSummaryRow: function aw_createSummaryRow(aLabel, aValue) {
-    let row = document.createElement("row");
-    row.setAttribute("align", "baseline");
-
-    let label = document.createElement("label");
-    label.setAttribute("class", "header");
-    if (aLabel.length > 20) {
-      aLabel = aLabel.substring(0, 20);
-      aLabel += "…";
-    }
-    label.setAttribute("value", aLabel);
-    row.appendChild(label);
-
-    let textbox = document.createElement("textbox");
-    textbox.setAttribute("value", aValue);
-    textbox.setAttribute("class", "plain");
-    textbox.setAttribute("readonly", true);
-    row.appendChild(textbox);
-
-    return row;
-  },
-
-  showSummary: function aw_showSummary() {
-    let rows = document.getElementById("summaryRows");
-    let bundle = document.getElementById("accountsBundle");
-    let child;
-    while (rows.hasChildNodes())
-      rows.lastChild.remove();
-
-    let label = bundle.getString("accountProtocol");
-    rows.appendChild(this.createSummaryRow(label, this.proto.name));
-    this.username = this.getUsername();
-    label = bundle.getString("accountUsername");
-    rows.appendChild(this.createSummaryRow(label, this.username));
-    if (!this.proto.noPassword) {
-      this.password = this.getValue("password");
-      if (this.password) {
-        label = document.getElementById("passwordLabel").value;
-        let pass = "";
-        for (let i = 0; i < this.password.length; ++i)
-          pass += "*";
-        rows.appendChild(this.createSummaryRow(label, pass));
-      }
-    }
-    this.alias = this.getValue("alias");
-    if (this.alias) {
-      label = document.getElementById("aliasLabel").value;
-      rows.appendChild(this.createSummaryRow(label, this.alias));
-    }
-
-/* FIXME
-    if (this.proto.newMailNotification)
-      rows.appendChild(this.createSummaryRow("Notify of new mails:",
-                                             this.getValue("newMailNotification")));
-*/
-
-    let id = this.proto.id;
-    this.prefs = [ ];
-    for (let opt of this.getProtoOptions()) {
-      let name = opt.name;
-      let eltName = id + "-" + name;
-      let val = this.getValue(eltName);
-      // The value will be undefined if the proto specific groupbox has never been opened
-      if (val === undefined)
-        continue;
-      switch (opt.type) {
-      case opt.typeBool:
-        if (val != opt.getBool())
-          this.prefs.push({opt: opt, name: name, value: !!val});
-        break;
-      case opt.typeInt:
-        if (val != opt.getInt())
-          this.prefs.push({opt: opt, name: name, value: val});
-        break;
-      case opt.typeString:
-        if (val != opt.getString())
-          this.prefs.push({opt: opt, name: name, value: val});
-        break;
-      case opt.typeList:
-        if (val != opt.getListDefault())
-          this.prefs.push({opt: opt, name: name, value: val});
-        break;
-      default:
-        throw "unknown preference type " + opt.type;
-      }
-    }
-
-    for (let i = 0; i < this.prefs.length; ++i) {
-      let opt = this.prefs[i];
-      let label = bundle.getFormattedString("accountColon", [opt.opt.label]);
-      rows.appendChild(this.createSummaryRow(label, opt.value));
-    }
-  },
-
-  createAccount: function aw_createAccount() {
-    let acc = Services.accounts.createAccount(this.username, this.proto.id);
-    if (!this.proto.noPassword && this.password)
-      acc.password = this.password;
-    if (this.alias)
-      acc.alias = this.alias;
-    //FIXME: newMailNotification
-
-    for (let i = 0; i < this.prefs.length; ++i) {
-      let option = this.prefs[i];
-      let opt = option.opt;
-      switch(opt.type) {
-      case opt.typeBool:
-        acc.setBool(option.name, option.value);
-        break;
-      case opt.typeInt:
-        acc.setInt(option.name, option.value);
-        break;
-      case opt.typeString:
-      case opt.typeList:
-        acc.setString(option.name, option.value);
-        break;
-      default:
-        throw "unknown type";
-      }
-    }
-    let autologin = this.getValue("connectAutomatically");
-    acc.autoLogin = autologin;
-
-    if (this.proto.usePurpleProxy)
-      acc.proxyInfo = this.proxy;
-
-    acc.save();
-
-    try {
-      if (autologin)
-        acc.connect();
-    } catch (e) {
-      // If the connection fails (for example if we are currently in
-      // offline mode), we still want to close the account wizard
-    }
-
-    if (window.opener) {
-      let am = window.opener.gAccountManager;
-      if (am)
-        am.selectAccount(acc.id);
-    }
-
-    return true;
-  },
-
-  getValue: function aw_getValue(aId) {
-    let elt = document.getElementById(aId);
-    if ("selectedItem" in elt)
-      return elt.selectedItem.value;
-    if ("checked" in elt)
-      return elt.checked;
-    if ("value" in elt)
-      return elt.value;
-    // If the groupbox has never been opened, the binding isn't attached
-    // so the attributes don't exist. The calling code in showSummary
-    // has a special handling of the undefined value for this case.
-    return undefined;
-  },
-
-  getIter: function*(aEnumerator) {
-    while (aEnumerator.hasMoreElements())
-      yield aEnumerator.getNext();
-  },
-  getProtocols: function aw_getProtocols() {
-    return this.getIter(Services.core.getProtocols());
-  },
-  getProtoOptions: function aw_getProtoOptions() {
-    return this.getIter(this.proto.getOptions());
-  },
-  getProtoUserSplits: function aw_getProtoUserSplits() {
-    return this.getIter(this.proto.getUsernameSplit());
-  },
-
-  onGroupboxKeypress: function aw_onGroupboxKeypress(aEvent) {
-    let target = aEvent.target;
-    let code = aEvent.charCode || aEvent.keyCode;
-    if (code == KeyEvent.DOM_VK_SPACE ||
-        (code == KeyEvent.DOM_VK_LEFT && !target.hasAttribute("closed")) ||
-        (code == KeyEvent.DOM_VK_RIGHT && target.hasAttribute("closed")))
-        this.toggleGroupbox(target.id);
-  },
-
-  toggleGroupbox: function aw_toggleGroupbox(id) {
-    let elt = document.getElementById(id);
-    if (elt.hasAttribute("closed")) {
-      elt.removeAttribute("closed");
-      if (elt.flexWhenOpened)
-        elt.flex = elt.flexWhenOpened;
-    }
-    else {
-      elt.setAttribute("closed", "true");
-      if (elt.flex) {
-        elt.flexWhenOpened = elt.flex;
-        elt.flex = 0;
-      }
-    }
-  },
-
-  openProxySettings: function aw_openProxySettings() {
-    window.openDialog("chrome://instantbird/content/proxies.xul", "",
-                      "chrome,modal,titlebar,centerscreen",
-                      this);
-    this.displayProxyDescription();
-  },
-
-  /* Check for correctness and set URL for the "Get more protocols..."-link
-   *  Stripped down code from preferences/themes.js
-   */
-  setGetMoreProtocols: function (){
-    let prefURL = PREF_EXTENSIONS_GETMOREPROTOCOLSURL;
-    let getMore = document.getElementById("getMoreProtocols");
-    let showGetMore = false;
-    const nsIPrefBranch = Ci.nsIPrefBranch;
-
-    if (Services.prefs.getPrefType(prefURL) != nsIPrefBranch.PREF_INVALID) {
-      try {
-        let getMoreURL = Cc["@mozilla.org/toolkit/URLFormatterService;1"]
-                           .getService(Ci.nsIURLFormatter)
-                           .formatURLPref(prefURL);
-        getMore.setAttribute("getMoreURL", getMoreURL);
-        showGetMore = getMoreURL != "about:blank";
-      }
-      catch (e) { }
-    }
-    getMore.hidden = !showGetMore;
-  },
-
-  openURL: function (aURL) {
-    Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-      .getService(Ci.nsIExternalProtocolService)
-      .loadURI(Services.io.newURI(aURL));
-  },
-
-  advanceTopProtocolPage: function() {
-    let selectedProtocol = document.getElementById("topprotolist").selectedItem;
-    if (!selectedProtocol || selectedProtocol.id == "otherListItem")
-      return true;
-    accountWizard.selectProtocol();
-    document.getElementById("accountWizard").goTo("accountusername");
-    return false;
-  },
-
-  rewindFromUsernamePage: function() {
-    let wizard = document.getElementById("accountWizard");
-    let previousPage = wizard.getPageById("accountusername").previous;
-    if (previousPage == "accountprotocol")
-      return true;
-    wizard.goTo(previousPage);
-    return false;
-  },
-
-  showProtocolPage: function() {
-    let protoList = document.getElementById("protolist");
-    if (protoList.itemCount > 0)
-      return;
-
-    accountWizard.setGetMoreProtocols();
-    let protos = [];
-    for (let proto of accountWizard.getProtocols())
-      protos.push(proto);
-    protos.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
-
-    protos.forEach(function(proto) {
-      let item = protoList.appendItem(proto.name, proto.id);
-      item.setAttribute("image", proto.iconBaseURI + "icon.png");
-      item.setAttribute("class", "listitem-iconic");
-    });
-
-    protoList.selectedIndex = 0;
-  },
-
-  topProtocolListKeypress: function() {
-    // Override the listbox behavior that sets a negative currentIndex to 0.
-    let topProtoList = document.getElementById("topprotolist");
-    if (topProtoList.selectedIndex < 0)
-      topProtoList.currentIndex = topProtoList.selectedIndex;
-  }
-};
deleted file mode 100644
--- a/im/content/accountWizard.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % accountsDTD SYSTEM "chrome://instantbird/locale/accountWizard.dtd">
-  %accountsDTD;
-]>
-
-<bindings id="accountWizardBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="topProtocol" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content align="center">
-     <xul:image xbl:inherits="src=prplicon" class="top-proto-icon"/>
-     <xul:vbox>
-       <xul:label xbl:inherits="value=name" class="top-proto-name"/>
-       <xul:description xbl:inherits="value=description" class="top-proto-description"/>
-     </xul:vbox>
-    </content>
-    <implementation>
-     <method name="build">
-      <parameter name="aProtocol"/>
-      <parameter name="aDescription"/>
-      <body>
-      <![CDATA[
-        this.setAttribute("name", aProtocol.name);
-        this.setAttribute("description", aDescription);
-        this.setAttribute("prplicon", aProtocol.iconBaseURI + "icon32.png");
-        this.value = aProtocol.id;
-      ]]>
-      </body>
-     </method>
-     <!-- override the default accessible name.
-          This is also used for typeahead selection. -->
-     <property name="label" onget="return this.getAttribute('name');"/>
-    </implementation>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/accountWizard.xul
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/accountWizard.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/accountWizard.css" type="text/css"?>
-
-<!DOCTYPE wizard [
-  <!ENTITY % accountWizardDTD SYSTEM "chrome://instantbird/locale/accountWizard.dtd">
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %accountWizardDTD;
-  %brandDTD;
-]>
-
-<wizard id="accountWizard" title="&windowTitle.label;"
-        windowtype="Messenger:accountWizard"
-        onwizardfinish="return accountWizard.createAccount();"
-        onload="accountWizard.onload();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <script type="application/javascript" src="chrome://chat/content/imAccountOptionsHelper.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/accountWizard.js"/>
-  <stringbundle id="proxiesBundle" src="chrome://instantbird/locale/proxies.properties"/>
-  <stringbundle id="accountsBundle" src="chrome://instantbird/locale/accounts.properties"/>
-  <stringbundle id="topProtocolsBundle" src="chrome://instantbird/locale/accountWizard.properties"/>
-
-  <wizardpage id="accounttoplist" pageid="accounttoplist" next="accountprotocol"
-              label="&accountProtocolTitle.label;"
-              onpageadvanced="return accountWizard.advanceTopProtocolPage();">
-    <description>&accountProtocolInfo.label2;</description>
-    <separator class="thin"/>
-    <richlistbox flex="1" id="topprotolist"
-                 ondblclick="document.getElementById('accountWizard').advance();"
-                 onkeypress="accountWizard.topProtocolListKeypress();">
-      <richlistitem id="otherListItem">
-        <label class="top-proto-name" value="&accountProtocolShowMore.label;"/>
-        <description class="top-proto-description" value="&accountProtocolShowMore.description;"/>
-      </richlistitem>
-    </richlistbox>
-  </wizardpage>
-
-  <wizardpage id="accountprotocol" pageid="accountprotocol" next="accountusername"
-              label="&accountProtocolTitle.label;"
-              onpageshow="accountWizard.showProtocolPage();"
-              onpageadvanced="return accountWizard.selectProtocol();">
-    <description>&accountProtocolInfo.label2;</description>
-    <separator class="thin"/>
-    <listbox flex="1" id="protolist"
-             ondblclick="document.getElementById('accountWizard').advance();"/>
-    <hbox pack="end">
-      <label id="getMoreProtocols" class="text-link" value="&accountProtocolGetMore.label;"
-             onclick="if (event.button == 0) { accountWizard.openURL(this.getAttribute('getMoreURL')); }"/>
-    </hbox>
-  </wizardpage>
-
-  <wizardpage id="accountusername" pageid="accountusername" next="accountpassword"
-              label="&accountUsernameTitle.label;"
-              onpageshow="accountWizard.showUsernamePage();"
-              onpagehide="accountWizard.hideUsernamePage();"
-              onpagerewound="return accountWizard.rewindFromUsernamePage();">
-    <description id="usernameInfo"/>
-    <separator/>
-    <vbox id="userNameBox"/>
-    <separator/>
-    <description id="duplicateAccount" hidden="true">&accountUsernameDuplicate.label;</description>
-  </wizardpage>
-
-  <wizardpage id="accountpassword" pageid="accountpassword" next="accountadvanced"
-              label="&accountPasswordTitle.label;">
-    <description>&accountPasswordInfo.label;</description>
-    <separator/>
-    <hbox id="passwordBox" align="baseline">
-      <label value="&accountPasswordField.label;" control="password" id="passwordLabel"/>
-      <textbox id="password" type="password"/>
-    </hbox>
-    <separator/>
-    <description id="passwordManagerDescription">&accountPasswordManager.label;</description>
-  </wizardpage>
-
-  <wizardpage id="accountadvanced" pageid="accountadvanced" next="accountsummary"
-              label="&accountAdvancedTitle.label;"
-              onpageshow="accountWizard.showAdvanced();">
-    <description>&accountAdvancedInfo.label;</description>
-    <separator class="thin"/>
-    <groupbox id="aliasGroupbox" class="collapsable"
-              onkeypress="accountWizard.onGroupboxKeypress(event)">
-      <caption id="aliasGroupboxCaption" label="&accountAliasGroupbox.caption;"
-               onclick="accountWizard.toggleGroupbox('aliasGroupbox')"/>
-      <hbox id="aliasBox" align="baseline">
-        <label value="&accountAliasField.label;" control="alias" id="aliasLabel"/>
-        <textbox id="alias"/>
-      </hbox>
-      <description>&accountAliasInfo.label;</description>
-    </groupbox>
-
-    <checkbox id="newMailNotification"
-              label="&accountAdvanced.newMailNotification.label;" hidden="true"/>
-
-    <groupbox id="protoSpecificGroupbox" class="collapsable" closed="true"
-              onkeypress="accountWizard.onGroupboxKeypress(event)">
-      <caption id="protoSpecificCaption"
-               onclick="accountWizard.toggleGroupbox('protoSpecificGroupbox')"/>
-      <grid flex="1">
-        <columns>
-          <column id="label-column" flex="1"/>
-          <column id="value-column" flex="1"/>
-        </columns>
-        <rows id="protoSpecific"/>
-      </grid>
-    </groupbox>
-
-    <groupbox id="proxyGroupbox" class="collapsable" closed="true"
-              onkeypress="accountWizard.onGroupboxKeypress(event)">
-      <caption id="proxyCaption" label="&accountProxySettings.caption;"
-               onclick="accountWizard.toggleGroupbox('proxyGroupbox')"/>
-      <description id="proxyDescription"/>
-      <hbox>
-        <spacer flex="1"/>
-        <button label="&accountProxySettings.change.label;"
-                accesskey="&accountProxySettings.change.accessKey;"
-                oncommand="accountWizard.openProxySettings();"/>
-      </hbox>
-    </groupbox>
-  </wizardpage>
-
-  <wizardpage id="accountsummary" pageid="accountsummary"
-              label="&accountSummaryTitle.label;"
-              onpageshow="accountWizard.showSummary();">
-    <description>&accountSummaryInfo.label;</description>
-    <separator/>
-    <grid id="summarygrid" flex="1">
-      <columns>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows id="summaryRows"/>
-    </grid>
-    <separator/>
-    <checkbox id="connectAutomatically" label= "&accountSummary.connectAutomatically.label;" checked="true"/>
-  </wizardpage>
-
-</wizard>
deleted file mode 100644
--- a/im/content/accounts.js
+++ /dev/null
@@ -1,715 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm");
-
-// This is the list of notifications that the account manager window observes
-var events = [
-  "prpl-quit",
-  "account-list-updated",
-  "account-added",
-  "account-updated",
-  "account-removed",
-  "account-connected",
-  "account-connecting",
-  "account-disconnected",
-  "account-disconnecting",
-  "account-connect-progress",
-  "account-connect-error",
-  "autologin-processed",
-  "status-changed",
-  "network:offline-status-changed"
-];
-
-var gAccountManager = {
-  // Sets the delay after connect() or disconnect() during which
-  // it is impossible to perform disconnect() and connect()
-  _disabledDelay: 500,
-  disableTimerID: 0,
-  _connectedLabelInterval: 0,
-  load: function am_load() {
-    // Wait until the password service is ready before offering anything.
-    Services.logins.initializationPromise.then(() => {
-      this.accountList = document.getElementById("accountlist");
-      let defaultID;
-      for (let acc of this.getAccounts()) {
-        var elt = document.createElement("richlistitem");
-        this.accountList.appendChild(elt);
-        elt.build(acc);
-        if (!defaultID && acc.firstConnectionState == acc.FIRST_CONNECTION_CRASHED)
-          defaultID = acc.id;
-      }
-      for (let event of events)
-        Services.obs.addObserver(this, event);
-      if (!this.accountList.getRowCount())
-        // This is horrible, but it works. Otherwise (at least on mac)
-        // the wizard is not centered relatively to the account manager
-        setTimeout(function() { gAccountManager.new(); }, 0);
-      else {
-        // we have accounts, show the list
-        document.getElementById("accountsDesk").selectedIndex = 1;
-
-        // ensure an account is selected
-        if (defaultID)
-          this.selectAccount(defaultID);
-        else
-          this.accountList.selectedIndex = 0;
-      }
-
-      this.setAutoLoginNotification();
-
-      this.accountList.addEventListener("keypress", this.onKeyPress, true);
-      window.addEventListener("unload", this.unload.bind(this));
-      this._connectedLabelInterval = setInterval(this.updateConnectedLabels, 60000);
-    }, () => {
-      this.close();
-    });
-  },
-  unload: function am_unload() {
-    clearInterval(this._connectedLabelInterval);
-    for (let event of events)
-      Services.obs.removeObserver(this, event);
-  },
-  _updateAccountList: function am__updateAccountList() {
-    let accountList = this.accountList;
-    let i = 0;
-    for (let acc of this.getAccounts()) {
-      let oldItem = accountList.getItemAtIndex(i);
-      if (oldItem.id != acc.id) {
-        let accElt = document.getElementById(acc.id);
-        accountList.insertBefore(accElt, oldItem);
-        accElt.restoreItems();
-      }
-      ++i;
-    }
-
-    if (accountList.itemCount == 0) {
-      // Focus the "New Account" button if there are no accounts left.
-      document.getElementById("newaccount").focus();
-      // Return early, otherwise we'll run into an 'undefined property' strict
-      //  warning when trying to focus the buttons. Fixes bug 408.
-      return;
-    }
-
-    // The selected item is still selected
-    accountList.selectedItem.buttons.setFocus();
-    accountList.ensureSelectedElementIsVisible();
-
-    // We need to refresh the disabled menu items
-    this.disableCommandItems();
-  },
-  observe: function am_observe(aObject, aTopic, aData) {
-    if (aTopic == "prpl-quit") {
-      // libpurple is being uninitialized. We don't need the account
-      // manager window anymore, close it.
-      this.close();
-      return;
-    }
-    else if (aTopic == "autologin-processed") {
-      var notification = document.getElementById("accountsNotificationBox")
-                                 .getNotificationWithValue("autoLoginStatus");
-      if (notification)
-        notification.close();
-      return;
-    }
-    else if (aTopic == "network:offline-status-changed") {
-      this.setOffline(aData == "offline");
-      return;
-    }
-    else if (aTopic == "status-changed") {
-      this.setOffline(aObject.statusType == Ci.imIStatusInfo.STATUS_OFFLINE);
-      return;
-    }
-    else if (aTopic == "account-list-updated") {
-      this._updateAccountList();
-      return;
-    }
-
-    // The following notification handlers need an account.
-    aObject.QueryInterface(Ci.imIAccount);
-
-    if (aTopic == "account-added") {
-      document.getElementById("accountsDesk").selectedIndex = 1;
-      var elt = document.createElement("richlistitem");
-      this.accountList.appendChild(elt);
-      elt.build(aObject);
-      if (this.accountList.getRowCount() == 1)
-        this.accountList.selectedIndex = 0;
-    }
-    else if (aTopic == "account-removed") {
-      var elt = document.getElementById(aObject.id);
-      elt.destroy();
-      if (!elt.selected) {
-        elt.remove();
-        return;
-      }
-      // The currently selected element is removed,
-      // ensure another element gets selected (if the list is not empty)
-      var selectedIndex = this.accountList.selectedIndex;
-      // Prevent errors if the timer is active and the account deleted
-      clearTimeout(this.disableTimerID);
-      this.disableTimerID = 0;
-      elt.remove();
-      var count = this.accountList.getRowCount();
-      if (!count) {
-        document.getElementById("accountsDesk").selectedIndex = 0;
-        return;
-      }
-      if (selectedIndex == count)
-        --selectedIndex;
-      this.accountList.selectedIndex = selectedIndex;
-    }
-    else if (aTopic == "account-updated") {
-      document.getElementById(aObject.id).build(aObject);
-      this.disableCommandItems();
-    }
-    else if (aTopic == "account-connect-progress")
-      document.getElementById(aObject.id).updateConnectionState();
-    else if (aTopic == "account-connect-error")
-      document.getElementById(aObject.id).updateConnectionError();
-    else {
-      const stateEvents = {
-        "account-connected": "connected",
-        "account-connecting": "connecting",
-        "account-disconnected": "disconnected",
-        "account-disconnecting": "disconnecting"
-      };
-      if (aTopic in stateEvents) {
-        let elt = document.getElementById(aObject.id);
-        if (!elt)
-          return; // probably disconnecting a removed account.
-
-        if (aTopic == "account-connecting") {
-          elt.removeAttribute("error");
-          elt.updateConnectionState();
-        }
-        else {
-          if (aTopic == "account-connected")
-            elt.refreshConnectedLabel();
-        }
-
-        elt.setAttribute("state", stateEvents[aTopic]);
-      }
-    }
-  },
-  cancelReconnection: function am_cancelReconnection() {
-    this.accountList.selectedItem.cancelReconnection();
-  },
-  connect: function am_connect() {
-    let account = this.accountList.selectedItem.account;
-    if (account.disconnected) {
-      this.temporarilyDisableButtons();
-      account.connect();
-    }
-  },
-  disconnect: function am_disconnect() {
-    let account = this.accountList.selectedItem.account;
-    if (account.connected || account.connecting) {
-      this.temporarilyDisableButtons();
-      account.disconnect();
-    }
-  },
-  addException: function am_addException() {
-    let account = this.accountList.selectedItem.account;
-    let prplAccount = account.prplAccount;
-    if (!account.disconnected || !prplAccount.connectionTarget)
-      return;
-
-    // Open the Gecko SSL exception dialog.
-    let params = {
-      exceptionAdded: false,
-      sslStatus: prplAccount.sslStatus,
-      prefetchCert: true,
-      location: prplAccount.connectionTarget
-    };
-    window.openDialog("chrome://pippki/content/exceptionDialog.xul", "",
-                      "chrome,centerscreen,modal", params);
-    // Reconnect the account if an exception was added.
-    if (params.exceptionAdded)
-      account.connect();
-  },
-  copyDebugLog: function am_copyDebugLog() {
-    let account = this.accountList.selectedItem.account;
-    let text = account.getDebugMessages().map(function(dbgMsg) {
-      let m = dbgMsg.message;
-      let time = new Date(m.timeStamp);
-      const dateTimeFormatter = new Services.intl.DateTimeFormat(undefined, {
-        dateStyle: "short", timeStyle: "long"
-      });
-      time = dateTimeFormatter.format(time);
-      let level = dbgMsg.logLevel;
-      if (!level)
-        return "(" + m.errorMessage + ")";
-      if (level == dbgMsg.LEVEL_ERROR)
-        level = "ERROR";
-      else if (level == dbgMsg.LEVEL_WARNING)
-        level = "WARN.";
-      else if (level == dbgMsg.LEVEL_LOG)
-        level = "LOG  ";
-      else
-        level = "DEBUG"
-      return "[" + time + "] " + level + " (@ " + m.sourceLine +
-             " " + m.sourceName + ":" + m.lineNumber + ")\n" +
-             m.errorMessage;
-    }).join("\n");
-    Cc["@mozilla.org/widget/clipboardhelper;1"]
-      .getService(Ci.nsIClipboardHelper).copyString(text);
-  },
-  showDebugLog: function am_showDebugLog() {
-    if (!("Core" in window))
-      ChromeUtils.import("resource:///modules/ibCore.jsm");
-    Core.showDebugLog(this.accountList.selectedItem.account.id);
-  },
-  updateConnectedLabels: function am_updateConnectedLabels() {
-    for (let i = 0; i < gAccountManager.accountList.itemCount; ++i) {
-      let item = gAccountManager.accountList.getItemAtIndex(i);
-      if (item.account.connected)
-        item.refreshConnectedLabel();
-    }
-  },
-  /* This function disables the connect/disconnect buttons for
-   * `this._disabledDelay` ms before calling disableCommandItems to restore
-   * the state of the buttons.
-   */
-  temporarilyDisableButtons: function am_temporarilyDisableButtons() {
-    document.getElementById("cmd_disconnect").setAttribute("disabled", "true");
-    document.getElementById("cmd_connect").setAttribute("disabled", "true");
-    clearTimeout(this.disableTimerID);
-    this.accountList.focus();
-    this.disableTimerID = setTimeout(function(aItem) {
-      gAccountManager.disableTimerID = 0;
-      gAccountManager.disableCommandItems();
-      aItem.buttons.setFocus();
-    }, this._disabledDelay, this.accountList.selectedItem);
-  },
-
-  delete: function am_delete() {
-    var selectedItem = this.accountList.selectedItem;
-    if (!selectedItem)
-      return;
-
-    var showPrompt =
-      Services.prefs.getBoolPref("messenger.accounts.promptOnDelete");
-    if (showPrompt) {
-      var prompts = Services.prompt;
-      var bundle = document.getElementById("accountsBundle");
-      var promptTitle    = bundle.getString("account.deletePrompt.title");
-      var promptMessage  = bundle.getString("account.deletePrompt.message");
-      var promptCheckbox = bundle.getString("account.deletePrompt.checkbox");
-      var deleteButton   = bundle.getString("account.deletePrompt.button");
-
-      var checkbox = {};
-      var flags = prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_0 +
-                  prompts.BUTTON_TITLE_CANCEL * prompts.BUTTON_POS_1 +
-                  prompts.BUTTON_POS_1_DEFAULT;
-      if (prompts.confirmEx(window, promptTitle, promptMessage, flags,
-                            deleteButton, null, null, promptCheckbox, checkbox))
-        return;
-
-      if (checkbox.value)
-        Services.prefs.setBoolPref("messenger.accounts.promptOnDelete", false);
-    }
-
-    Services.accounts.deleteAccount(selectedItem.id);
-  },
-  new: function am_new() {
-    this.openDialog("chrome://instantbird/content/accountWizard.xul");
-  },
-  edit: function am_edit() {
-    this.openDialog("chrome://instantbird/content/account.xul",
-                    this.accountList.selectedItem.account);
-  },
-  autologin: function am_autologin() {
-    var elt = this.accountList.selectedItem;
-    elt.autoLogin = !elt.autoLogin;
-  },
-  close: function am_close() {
-    // If a modal dialog is opened, we can't close this window now
-    if (this.modalDialog)
-      setTimeout(function() { window.close();}, 0);
-    else
-      window.close();
-  },
-
-  /* This function disables or enables the currently selected button and
-     the corresponding context menu item */
-  disableCommandItems: function am_disableCommandItems() {
-    let accountList = this.accountList;
-    let selectedItem = accountList.selectedItem;
-    // When opening the account manager, if accounts have errors, we
-    // can be called during build(), before any item is selected.
-    // In this case, just return early.
-    if (!selectedItem)
-      return;
-
-    // If the timer that disables the button (for a short time) already exists,
-    // we don't want to interfere and set the button as enabled.
-    if (this.disableTimerID)
-      return;
-
-    let account = selectedItem.account;
-    let isCommandDisabled =
-      (this.isOffline ||
-       (account.disconnected &&
-        account.connectionErrorReason == Ci.imIAccount.ERROR_UNKNOWN_PRPL));
-    let disabledItems = {
-      connect: isCommandDisabled,
-      disconnect: isCommandDisabled,
-      moveup: accountList.selectedIndex == 0,
-      movedown: accountList.selectedIndex == accountList.itemCount - 1
-    };
-    for (let name in disabledItems) {
-      let elt = document.getElementById("cmd_" + name);
-      if (disabledItems[name])
-        elt.setAttribute("disabled", "true");
-      else
-        elt.removeAttribute("disabled");
-    }
-  },
-  onContextMenuShowing: function am_onContextMenuShowing() {
-    let targetElt = document.popupNode;
-    let isAccount = targetElt instanceof Ci.nsIDOMXULSelectControlItemElement;
-    document.getElementById("contextAccountsItems").hidden = !isAccount;
-    if (isAccount) {
-      let account = targetElt.account;
-      let hiddenItems = {
-        connect: !account.disconnected,
-        disconnect: account.disconnected || account.disconnecting,
-        cancelReconnection: !targetElt.hasAttribute("reconnectPending"),
-        accountsItemsSeparator: account.disconnecting
-      };
-      for (let name in hiddenItems)
-        document.getElementById("context_" + name).hidden = hiddenItems[name];
-    }
-  },
-
-  selectAccount: function am_selectAccount(aAccountId) {
-    this.accountList.selectedItem = document.getElementById(aAccountId);
-  },
-  onAccountSelect: function am_onAccountSelect() {
-    clearTimeout(this.disableTimerID);
-    this.disableTimerID = 0;
-    this.disableCommandItems();
-    let selectedItem = this.accountList.selectedItem;
-    selectedItem.clientHeight; // force synchronous binding attachment
-    selectedItem.buttons.setFocus();
-    // Without the following, the account manager is scrolled to the first
-    // (dis)connect button when being opened.
-    this.accountList.ensureSelectedElementIsVisible();
-  },
-
-  onKeyPress: function am_onKeyPress(event) {
-    if (!this.selectedItem)
-      return;
-
-    if (event.shiftKey &&
-        (event.keyCode == event.DOM_VK_DOWN || event.keyCode == event.DOM_VK_UP)) {
-      let offset = event.keyCode == event.DOM_VK_DOWN ? 1 : -1;
-      gAccountManager.moveCurrentItem(offset);
-      event.stopPropagation();
-      event.preventDefault();
-      return;
-    }
-
-    // As we stop propagation, the default action applies to the richlistbox
-    // so that the selected account is changed with this default action
-    if (event.keyCode == event.DOM_VK_DOWN) {
-      if (this.selectedIndex < this.itemCount - 1)
-        this.ensureIndexIsVisible(this.selectedIndex + 1);
-      event.stopPropagation();
-      return;
-    }
-
-    if (event.keyCode == event.DOM_VK_UP) {
-      if (this.selectedIndex > 0)
-        this.ensureIndexIsVisible(this.selectedIndex - 1);
-      event.stopPropagation();
-      return;
-    }
-
-    if (event.keyCode == event.DOM_VK_RETURN) {
-      let target = event.originalTarget;
-      if (target.localName != "checkbox" &&
-          (target.localName != "button" ||
-           /^(dis)?connect$/.test(target.getAttribute("anonid"))))
-        this.selectedItem.buttons.proceedDefaultAction();
-      return;
-    }
-
-    if (event.keyCode == event.DOM_VK_DELETE)
-       document.getElementById("cmd_delete").doCommand();
-  },
-
-  moveCurrentItem: function am_moveCurrentItem(aOffset) {
-    let accountList = this.accountList;
-    if (!aOffset || !accountList.selectedItem)
-      return;
-
-    // Create the new preference value from the richlistbox list
-    let items = accountList.children;
-    let selectedID = accountList.selectedItem.id;
-    let array = [];
-    for (let i in items)
-      if (items[i].id != selectedID)
-        array.push(items[i].id);
-
-    let newIndex = accountList.selectedIndex + aOffset;
-    if (newIndex < 0)
-      newIndex = 0;
-    else if (newIndex >= accountList.itemCount)
-      newIndex = accountList.itemCount - 1;
-    array.splice(newIndex, 0, selectedID);
-
-    Services.prefs.setCharPref("messenger.accounts", array.join(","));
-  },
-
-  getAccounts: function* am_getAccounts() {
-    let accounts = Services.accounts.getAccounts();
-    while (accounts.hasMoreElements())
-      yield accounts.getNext();
-  },
-
-  openDialog: function am_openDialog(aUrl, aArgs) {
-    this.modalDialog = true;
-    window.openDialog(aUrl, "", "chrome,modal,titlebar,centerscreen", aArgs);
-    this.modalDialog = false;
-  },
-  setAutoLoginNotification: function am_setAutoLoginNotification() {
-    var as = Services.accounts;
-    var autoLoginStatus = as.autoLoginStatus;
-    let isOffline = false;
-    let crashCount = 0;
-    for (let acc of this.getAccounts())
-      if (acc.autoLogin && acc.firstConnectionState == acc.FIRST_CONNECTION_CRASHED)
-        ++crashCount;
-
-    if (autoLoginStatus == as.AUTOLOGIN_ENABLED && crashCount == 0) {
-      let status = Services.core.globalUserStatus.statusType;
-      this.setOffline(isOffline || status == Ci.imIStatusInfo.STATUS_OFFLINE);
-      return;
-    }
-
-    var bundle = document.getElementById("accountsBundle");
-    var box = document.getElementById("accountsNotificationBox");
-    var priority = box.PRIORITY_INFO_HIGH;
-    var connectNowButton = {
-      accessKey: bundle.getString("accountsManager.notification.button.accessKey"),
-      callback: this.processAutoLogin,
-      label: bundle.getString("accountsManager.notification.button.label")
-    };
-    var label;
-
-    switch (autoLoginStatus) {
-      case as.AUTOLOGIN_USER_DISABLED:
-        label = bundle.getString("accountsManager.notification.userDisabled.label");
-        break;
-
-      case as.AUTOLOGIN_SAFE_MODE:
-        label = bundle.getString("accountsManager.notification.safeMode.label");
-        break;
-
-      case as.AUTOLOGIN_START_OFFLINE:
-        label = bundle.getString("accountsManager.notification.startOffline.label");
-        isOffline = true;
-        break;
-
-      case as.AUTOLOGIN_CRASH:
-        label = bundle.getString("accountsManager.notification.crash.label");
-        priority = box.PRIORITY_WARNING_MEDIUM;
-        break;
-
-      /* One or more accounts made the application crash during their connection.
-         If none, this function has already returned */
-      case as.AUTOLOGIN_ENABLED:
-        if (!("PluralForm" in window))
-          ChromeUtils.import("resource://gre/modules/PluralForm.jsm");
-        label = bundle.getString("accountsManager.notification.singleCrash.label");
-        label = PluralForm.get(crashCount, label).replace("#1", crashCount);
-        priority = box.PRIORITY_WARNING_MEDIUM;
-        connectNowButton.callback = this.processCrashedAccountsLogin;
-        break;
-
-      default:
-        label = bundle.getString("accountsManager.notification.other.label");
-    }
-    let status = Services.core.globalUserStatus.statusType;
-    this.setOffline(isOffline || status == Ci.imIStatusInfo.STATUS_OFFLINE);
-
-    box.appendNotification(label, "autologinStatus", null, priority, [connectNowButton]);
-  },
-  processAutoLogin: function am_processAutoLogin() {
-    var ioService = Services.io;
-    if (ioService.offline) {
-      ioService.manageOfflineStatus = false;
-      ioService.offline = false;
-    }
-
-    Services.accounts.processAutoLogin();
-
-    gAccountManager.accountList.selectedItem.buttons.setFocus();
-  },
-  processCrashedAccountsLogin: function am_processCrashedAccountsLogin() {
-    for (let acc of gAccountManager.getAccounts())
-      if (acc.disconnected && acc.autoLogin &&
-          acc.firstConnectionState == acc.FIRST_CONNECTION_CRASHED)
-        acc.connect();
-
-    let notification = document.getElementById("accountsNotificationBox")
-                               .getNotificationWithValue("autoLoginStatus");
-    if (notification)
-      notification.close();
-
-    gAccountManager.accountList.selectedItem.buttons.setFocus();
-  },
-  setOffline: function am_setOffline(aState) {
-    this.isOffline = aState;
-    if (aState)
-      this.accountList.setAttribute("offline", "true");
-    else
-      this.accountList.removeAttribute("offline");
-    this.disableCommandItems();
-  }
-};
-
-
-var gAMDragAndDrop = {
-  ACCOUNT_MIME_TYPE: "application/x-moz-richlistitem",
-  // Size of the scroll zone on the top and on the bottom of the account list
-  MAGIC_SCROLL_HEIGHT: 20,
-
-  // A preference already exists to define scroll speed, let's use it.
-  get SCROLL_SPEED() {
-    delete this.SCROLL_SPEED;
-    try {
-      this.SCROLL_SPEED =
-        Services.prefs.getIntPref("toolkit.scrollbox.scrollIncrement");
-    }
-    catch (e) {
-      this.SCROLL_SPEED = 20;
-    }
-    return this.SCROLL_SPEED;
-  },
-
-  onDragStart: function amdnd_onDragStart(aEvent, aTransferData, aAction) {
-    let accountElement = aEvent.explicitOriginalTarget;
-    // This stops the dragging session.
-    if (!(accountElement instanceof Ci.nsIDOMXULSelectControlItemElement))
-      throw "Element is not draggable!";
-    if (gAccountManager.accountList.itemCount == 1)
-      throw "Can't drag while there is only one account!";
-
-    // Transferdata is never used, but we need to transfer something.
-    aTransferData.data = new TransferData();
-    aTransferData.data.addDataForFlavour(this.ACCOUNT_MIME_TYPE, accountElement);
-  },
-
-  onDragOver: function amdnd_onDragOver(aEvent, aFlavour, aSession) {
-    let accountElement = aEvent.explicitOriginalTarget;
-    // We are dragging over the account manager, consider it is the same as
-    // the last element.
-    if (accountElement == gAccountManager.accountList)
-      accountElement = gAccountManager.accountList.lastChild;
-
-    // Auto scroll the account list if we are dragging at the top/bottom
-    this.checkForMagicScroll(aEvent.clientY);
-
-    // The hovered element has changed, change the border too
-    if (("_accountElement" in this) && this._accountElement != accountElement)
-      this.cleanBorders();
-
-    if (!aSession.canDrop) {
-      aEvent.dataTransfer.dropEffect = "none";
-      return;
-    }
-    aEvent.dataTransfer.dropEffect = "move";
-
-    if (aEvent.clientY < accountElement.getBoundingClientRect().top +
-                         accountElement.clientHeight / 2) {
-      // we don't want the previous item to show its default bottom-border
-      let previousItem = accountElement.previousSibling;
-      if (previousItem)
-        previousItem.style.borderBottom = "none";
-      accountElement.setAttribute("dragover", "up");
-    }
-    else {
-      if (("_accountElement" in this) &&
-          this._accountElement == accountElement &&
-          accountElement.getAttribute("dragover") == "up")
-        this.cleanBorders();
-      accountElement.setAttribute("dragover", "down");
-    }
-
-    this._accountElement = accountElement;
-  },
-
-  cleanBorders: function amdnd_cleanBorders(aIsEnd) {
-    if (!this._accountElement)
-      return;
-
-    this._accountElement.removeAttribute("dragover");
-    // reset the border of the previous element
-    let previousItem = this._accountElement.previousSibling;
-    if (previousItem) {
-      if (aIsEnd && !previousItem.style.borderBottom && previousItem.previousSibling)
-        previousItem = previousItem.previousSibling;
-      previousItem.style.borderBottom = "";
-    }
-
-    if (aIsEnd)
-      delete this._accountElement;
-  },
-
-  canDrop: function amdnd_canDrop(aEvent, aSession) {
-    let accountElement = aEvent.explicitOriginalTarget;
-    if (accountElement == gAccountManager.accountList)
-      accountElement = gAccountManager.accountList.lastChild;
-    return (accountElement != gAccountManager.accountList.selectedItem);
-  },
-
-  checkForMagicScroll: function amdnd_checkForMagicScroll(aClientY) {
-    let accountList = gAccountManager.accountList;
-    let listSize = accountList.getBoundingClientRect();
-    let direction = 1;
-    if (aClientY < listSize.top + this.MAGIC_SCROLL_HEIGHT)
-      direction = -1;
-    else if (aClientY < listSize.bottom - this.MAGIC_SCROLL_HEIGHT)
-      // We are not on a scroll zone
-      return;
-
-    accountList._scrollbox.scrollTop += direction * this.SCROLL_SPEED;
-  },
-
-  onDrop: function amdnd_onDrop(aEvent, aTransferData, aSession) {
-    let accountElement = aEvent.explicitOriginalTarget;
-    if (accountElement == gAccountManager.accountList)
-      accountElement = gAccountManager.accountList.lastChild;
-
-     if (!aSession.canDrop)
-      return;
-
-    // compute the destination
-    let accountList = gAccountManager.accountList;
-    let offset = accountList.getIndexOfItem(accountElement) -
-                 accountList.selectedIndex;
-    let isDroppingAbove =
-      aEvent.clientY < accountElement.getBoundingClientRect().top +
-                       accountElement.clientHeight / 2;
-    if (offset > 0)
-      offset -= isDroppingAbove;
-    else
-      offset += !isDroppingAbove;
-    gAccountManager.moveCurrentItem(offset);
-  },
-
-  getSupportedFlavours: function amdnd_getSupportedFlavours() {
-    var flavours = new FlavourSet();
-    flavours.appendFlavour(this.ACCOUNT_MIME_TYPE,
-                           "nsIDOMXULSelectControlItemElement");
-    return flavours;
-  }
-};
-
-window.addEventListener("DOMContentLoaded", () => { gAccountManager.load(); });
deleted file mode 100644
--- a/im/content/accounts.xul
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://chat/content/accounts.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/richlistbox.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/accounts.css" type="text/css"?>
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-#endif
-
-<!DOCTYPE window [
- <!ENTITY % accountsDTD SYSTEM "chrome://chat/locale/accounts.dtd">
- <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
- %accountsDTD;
- %brandDTD;
-#ifdef XP_MACOSX
- <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
- %instantbirdDTD;
-#endif
-]>
-
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        id="accountManager"
-        windowtype="Messenger:Accounts"
-        title="&accounts.title;"
-        height="300"
-        width="&accountManager.width;"
-        persist="width height screenX screenY">
-  <script type="application/javascript" src="chrome://instantbird/content/accounts.js"/>
-  <script type="application/javascript" src="chrome://global/content/nsDragAndDrop.js" />
-  <script type="application/javascript" src="chrome://global/content/nsTransferable.js" />
-
-  <stringbundle id="accountsBundle" src="chrome://instantbird/locale/accounts.properties"/>
-
-  <commandset id="accountsCommands">
-    <command id="cmd_connect"
-             accesskey="&account.connect.accesskey;"
-             label="&account.connect.label;"
-             oncommand="gAccountManager.connect()"/>
-    <command id="cmd_disconnect"
-             label="&account.disconnect.label;"
-             accesskey="&account.disconnect.accesskey;"
-             oncommand="gAccountManager.disconnect()"/>
-    <command id="cmd_cancelReconnection"
-             label="&account.cancelReconnection.label;"
-             accesskey="&account.cancelReconnection.accesskey;"
-             oncommand="gAccountManager.cancelReconnection()"/>
-    <command id="cmd_copyDebugLog"
-             label="&account.copyDebugLog.label;"
-             accesskey="&account.copyDebugLog.accesskey;"
-             oncommand="gAccountManager.copyDebugLog();"/>
-    <command id="cmd_showDebugLog"
-             label="&account.showDebugLog.label;"
-             accesskey="&account.showDebugLog.accesskey;"
-             oncommand="gAccountManager.showDebugLog();"/>
-    <command id="cmd_moveup"
-             label="&account.moveup.label;"
-             oncommand="gAccountManager.moveCurrentItem(-1)"/>
-    <command id="cmd_movedown"
-             label="&account.movedown.label;"
-             oncommand="gAccountManager.moveCurrentItem(1)"/>
-    <command id="cmd_delete"
-             label="&account.delete.label;"
-             accesskey="&account.delete.accesskey;"
-             oncommand="gAccountManager.delete()"/>
-    <command id="cmd_edit"
-             label="&account.edit.label;"
-             accesskey="&account.edit.accesskey;"
-             oncommand="gAccountManager.edit()"/>
-    <command id="cmd_new"
-             label="&accountManager.newAccount.label;"
-             accesskey="&accountManager.newAccount.accesskey;"
-             oncommand="gAccountManager.new()"/>
-    <command id="cmd_close"
-             label="&accountManager.close.label;"
-             accesskey="&accountManager.close.accesskey;"
-             oncommand="gAccountManager.close()"/>
-  </commandset>
-
-  <keyset id="accountsKeys">
-    <key id="key_close1" key="w" modifiers="accel" command="cmd_close"/>
-    <key id="key_close2" keycode="VK_ESCAPE" command="cmd_close"/>
-    <key id="key_close3" command="cmd_close"
-         key="&accountManager.close.commandkey;" modifiers="accel,shift"/>
-  </keyset>
-
-#ifdef XP_MACOSX
-#include menus.xul.inc
-#endif
-
-  <broadcasterset>
-    <broadcaster id="contextAccountsItems"/>
-  </broadcasterset>
-
-  <menupopup id="accountsContextMenu"
-             onpopupshowing="gAccountManager.onContextMenuShowing()">
-    <menuitem id="context_connect"
-              command="cmd_connect"
-              observes="contextAccountsItems"/>
-    <menuitem id="context_disconnect"
-              command="cmd_disconnect"
-              observes="contextAccountsItems"/>
-    <menuitem id="context_cancelReconnection"
-              command="cmd_cancelReconnection"
-              observes="contextAccountsItems"/>
-    <menuitem id="context_copyDebugLog"
-              command="cmd_copyDebugLog"/>
-    <menuitem id="context_showDebugLog"
-              command="cmd_showDebugLog"/>
-    <menuseparator id="context_accountsItemsSeparator"
-                   observes="contextAccountsItems"/>
-    <menuitem command="cmd_new"/>
-    <menuitem command="cmd_delete" observes="contextAccountsItems"/>
-    <menuseparator observes="contextAccountsItems"/>
-    <menuitem command="cmd_moveup" observes="contextAccountsItems"/>
-    <menuitem command="cmd_movedown" observes="contextAccountsItems"/>
-    <menuseparator observes="contextAccountsItems"/>
-    <menuitem command="cmd_edit" observes="contextAccountsItems"/>
-  </menupopup>
-
-  <deck flex="1" id="accountsDesk" ondblclick="gAccountManager.new();">
-    <vbox flex="1" id="noAccountScreen" align="center" pack="center">
-      <hbox id="noAccountBox" align="top">
-        <vbox id="noAccountInnerBox" flex="1">
-          <label id="noAccountTitle" value="&accountManager.noAccount.title;"/>
-          <description id="noAccountDesc">&accountManager.noAccount.description;</description>
-        </vbox>
-      </hbox>
-    </vbox>
-    <notificationbox id="accountsNotificationBox" flex="1">
-      <richlistbox id="accountlist" flex="1" context="accountsContextMenu"
-                   onselect="gAccountManager.onAccountSelect();"
-                   ondragstart="nsDragAndDrop.startDrag(event, gAMDragAndDrop);"
-                   ondragover="nsDragAndDrop.dragOver(event, gAMDragAndDrop);"
-                   ondragend="gAMDragAndDrop.cleanBorders(true);"
-                   ondrop="nsDragAndDrop.drop(event, gAMDragAndDrop);"/>
-    </notificationbox>
-  </deck>
-  <windowdragbox id="bottombuttons" align="center">
-    <button id="newaccount" command="cmd_new"/>
-    <spacer flex="1"/>
-#ifdef XP_WIN
-    <button id="close" command="cmd_close"/>
-#endif
-  </windowdragbox>
-</window>
deleted file mode 100644
--- a/im/content/addbuddy.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-var addBuddy = {
-  onload: function ab_onload() {
-    this.buildAccountList();
-    this.buildTagList();
-  },
-
-  buildAccountList: function ab_buildAccountList() {
-    var accountList = document.getElementById("accountlist");
-    for (let acc of getIter(Services.accounts.getAccounts())) {
-      if (!acc.connected)
-        continue;
-      var proto = acc.protocol;
-      var item = accountList.appendItem(acc.name, acc.id, proto.name);
-      item.setAttribute("image", proto.iconBaseURI + "icon.png");
-      item.setAttribute("class", "menuitem-iconic");
-    }
-    if (!accountList.itemCount) {
-      document.getElementById("addBuddyDialog").cancelDialog();
-      throw "No connected account!";
-    }
-    accountList.selectedIndex = 0;
-  },
-
-  buildTagList: function ab_buildTagList() {
-    var tagList = document.getElementById("taglist");
-    Services.tags.getTags().forEach(function(tag) {
-      tagList.appendItem(tag.name, tag.id);
-    });
-    tagList.selectedIndex = 0;
-  },
-
-  oninput: function ab_oninput() {
-    document.documentElement.getButton("accept").disabled =
-      !addBuddy.getValue("name");
-  },
-
-  getValue: function ab_getValue(aId) { return document.getElementById(aId).value; },
-
-  create: function ab_create() {
-    var account = Services.accounts.getAccountById(this.getValue("accountlist"));
-    var name = this.getValue("name");
-
-    var tag;
-    var taglist = document.getElementById("taglist");
-    var items = taglist.getElementsByAttribute("label", taglist.label);
-    if (items.length)
-      tag = Services.tags.getTagById(items[0].value);
-    else
-      tag = Services.tags.createTag(taglist.label);
-
-    account.addBuddy(tag, name);
-  }
-};
deleted file mode 100644
--- a/im/content/addbuddy.xul
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/menulist.css" type="text/css"?>
-
-<!DOCTYPE window SYSTEM "chrome://instantbird/locale/addbuddy.dtd">
-
-<dialog
-  id     = "addBuddyDialog"
-  windowtype="Messenger:AddBuddy"
-  title  = "&addContactWindow.title;"
-  buttons= "accept,cancel"
-  xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-  onload = "addBuddy.onload()"
-  ondialogaccept="addBuddy.create()"
-  buttondisabledaccept="true">
-  <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/addbuddy.js"/>
-
-  <stringbundle id="instantbirdBundle" src="chrome://instantbird/locale/instantbird.properties"/>
-
-  <grid>
-   <columns>
-    <column/>
-    <column flex="1"/>
-   </columns>
-   <rows>
-
-    <row id="nameBox" align="baseline">
-     <label value="&name.label;" control="name"/>
-     <textbox id="name" oninput="addBuddy.oninput()"/>
-    </row>
-
-    <row id="accountBox" align="center">
-     <label value="&account.label;" control="accountlist"/>
-     <menulist id="accountlist"/>
-    </row>
-
-    <row id="tagBox" align="baseline">
-     <label value="&tag.label;" control="taglist"/>
-     <menulist id="taglist" editable="true"/>
-    </row>
-
-   </rows>
-  </grid>
-</dialog>
deleted file mode 100644
--- a/im/content/blist.css
+++ /dev/null
@@ -1,188 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-contact {
-  -moz-binding: url("chrome://instantbird/content/contact.xml#contact");
-  -moz-box-align: center;
-}
-contact[open],
-contact[aliasing],
-#buddylistbox:focus > contact[selected] {
-  -moz-binding: url("chrome://instantbird/content/contact.xml#contact-big");
-  -moz-box-orient: vertical;
-  -moz-box-align: stretch;
-}
-
-contact[aliasing] .contactDisplayName {
-  -moz-binding: url("chrome://global/content/bindings/textbox.xml#textbox");
-}
-
-buddy {
-  -moz-binding: url("chrome://instantbird/content/buddy.xml#buddy");
-}
-buddy[dummy] {
-  -moz-binding: url("chrome://instantbird/content/buddy.xml#buddy-dummy");
-}
-
-group {
-  -moz-binding: url("chrome://instantbird/content/group.xml#group");
-  -moz-box-align: center;
-}
-
-/* The height is required for the animation to work. */
-group {
-  height: 1em;
-}
-
-conv,
-contact,
-buddy {
-  /* Variable set from blist.js. This is necessary as CSS transitions don't
-     work with height: auto.
-     Usually 16+2+2px for the protocol icon, padding top and bottom. */
-  height: var(--blist-item-height);
-}
-
-contact[open],
-contact[aliasing],
-#buddylistbox:focus > contact[selected] {
-  /* This is fine because height transitions in this state are on the
-     buddies, and there is no transition on selection (it's instant). */
-  height: auto;
-}
-
-/* Possible values of the |state| attribute:
- - not set: the binding is not initialized yet,
- - showing: during the expand animation,
- - visible: the buddy is visible to the user,
- - fading: the buddy has signed-off, during the fade out animation,
- - collapsing: collapse animation (before the node is removed from the DOM),
- - collapsed: the buddy is inside a closed group.
- */
-contact:not([state]),
-buddy:not([state]) {
-  height: 0;
-}
-
-contact[state="showing"],
-buddy[state="showing"] {
-  /* Should match the transition effect for contact/buddy collapsing so
-     that reordering doesn't make the whole list jump. */
-  transition: height .2s ease-in;
-}
-
-contact[state="fading"] {
-  opacity: 0;
-  transition: opacity .4s ease-in 1s;
-}
-
-contact[state="collapsing"],
-buddy[state="collapsing"],
-group[collapsing="true"] {
-  height: 0;
-  transition: height .2s ease-in;
-}
-
-contact[state="collapsing"] *,
-contact[state="showing"] *,
-buddy[state="collapsing"] *,
-buddy[state="showing"] *,
-group[collapsing="true"] * {
-  display: none;
-}
-
-#dummyContact {
-  height: auto;
-}
-
-#dummylistbox {
-  visibility: hidden;
-}
-
-tooltip[type="im"] {
-  -moz-binding: url("chrome://chat/content/imtooltip.xml#tooltip");
-}
-
-#userIcon {
-  -moz-user-focus: normal;
-}
-
-#statusTypeIcon {
-  cursor: pointer;
-  -moz-user-focus: ignore;
-}
-
-#displayName,
-#statusMessage:not([statusType="offline"]) {
-  cursor: text;
-}
-
-#displayName[editing],
-#statusMessage[editing] {
-  -moz-appearance: textfield;
-  -moz-binding: url('chrome://global/content/bindings/textbox.xml#textbox');
-}
-
-.convUnreadCount,
-.convUnreadTargetedCount,
-.hideGroupButton,
-.startChatBubble,
-.expander-up,
-.expander-down {
-  cursor: pointer;
-}
-
-.hideGroupButton,
-.startChatBubble,
-.expander-up,
-.expander-down {
-  -moz-user-focus: ignore;
-}
-
-.hideGroupButton,
-.startChatBubble
-{
-  display: none;
-}
-
-group:not([id="group-1"]):hover .hideGroupButton,
-contact[cansend]:hover .startChatBubble,
-#buddylistbox:focus > contact[cansend][selected] .startChatBubble {
-  display: -moz-box;
-}
-
-conv {
-  -moz-binding: url("chrome://instantbird/content/conv.xml#conv");
-  -moz-box-align: center;
-}
-
-.convUnreadCount[value="0"],
-.convUnreadTargetedCount[value="0"] {
-  display: none;
-}
-
-#buddyListMsg[listedConvCount="0"] > .listboxHeader {
-  display: none;
-}
-
-#buddyListMsg[listedConvCount="0"] > #convlistbox {
-  -moz-user-focus: ignore;
-}
-
-/* Make the notification bar work with narrow windows. */
-.notification-inner > hbox {
-  display: inline-block;
-}
-
-.notification-inner > hbox > .messageImage {
-  max-width: 0;
-}
-
-#userIconCanvas {
-  display: none;
-}
-
-#userIconPanelImage[src=""] + #userIconPanelImageRemove {
-  display: none;
-}
deleted file mode 100644
--- a/im/content/blist.js
+++ /dev/null
@@ -1,1006 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource:///modules/imStatusUtils.jsm");
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.defineModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
-
-var events = ["buddy-authorization-request",
-                "buddy-authorization-request-canceled",
-                "contact-availability-changed",
-                "contact-added",
-                "contact-tag-added",
-                "contact-tag-removed",
-                "showing-ui-conversation",
-                "status-changed",
-                "tag-hidden",
-                "tag-shown",
-                "ui-conversation-hidden",
-                "user-display-name-changed",
-                "user-icon-changed",
-                "prpl-quit"];
-
-var showOfflineBuddiesPref = "messenger.buddies.showOffline";
-
-var gBuddyListContextMenu = null;
-
-function buddyListContextMenu(aXulMenu) {
-  this.target  = document.popupNode;
-  this.menu    = aXulMenu;
-  let localName = this.target.localName;
-  let hasVisibleBuddies = !!document.getElementById("buddylistbox").firstChild;
-
-  // Don't display a context menu on the headers or the drop target.
-  this.shouldDisplay =
-    localName != "label" && !this.target.hasAttribute("dummy");
-  if (!this.shouldDisplay)
-    return;
-
-  this.onContact = localName == "contact";
-  this.onBuddy = localName == "buddy";
-  this.onGroup = localName == "group";
-  this.onConv = localName == "conv";
-  let hide = !(this.onContact || this.onBuddy);
-
-  [ "context-edit-buddy-separator",
-    "context-alias",
-    "context-delete",
-    "context-tags"
-  ].forEach(function (aId) {
-    document.getElementById(aId).hidden = hide;
-  });
-  if (!hide) {
-    ChromeUtils.import("resource:///modules/ibTagMenu.jsm");
-    this.tagMenu = new TagMenu(this, window, "context-tags",
-                               this.toggleTag, this.addTag,
-                               this.onBuddy ? this.target.contact : this.target);
-  }
-
-  document.getElementById("context-hide-tag").hidden = !this.onGroup;
-
-  document.getElementById("context-visible-tags").hidden =
-    !hide || this.onConv || !hasVisibleBuddies;
-
-  let uiConv;
-  if (!hide) {
-    let contact =
-      this.onContact ? this.target.contact : this.target.buddy.contact;
-    uiConv = Services.conversations.getUIConversationByContactId(contact.id);
-  }
-  document.getElementById("context-openconversation").hidden = hide || uiConv;
-  document.getElementById("context-show-conversation").hidden = !this.onConv && !uiConv;
-  document.getElementById("context-close-conversation-separator").hidden = !this.onConv;
-  document.getElementById("context-close-conversation").hidden = !this.onConv;
-  let showLogsItem = document.getElementById("context-showlogs");
-  let hideShowLogsItem = hide && !this.onConv;
-  showLogsItem.hidden = hideShowLogsItem;
-  if (!hideShowLogsItem)  {
-    // Start disabled, then enable if we have logs.
-    showLogsItem.setAttribute("disabled", true);
-    this._getLogs().then(aLogs => {
-      if (aLogs && aLogs.hasMoreElements())
-        showLogsItem.removeAttribute("disabled");
-    });
-  }
-
-  if (this.onGroup) {
-    document.getElementById("context-hide-tag").disabled =
-      this.target.tag.id == -1;
-  }
-
-  document.getElementById("context-show-offline-buddies-separator").hidden =
-    this.onConv || !hasVisibleBuddies;
-
-  document.getElementById("context-show-offline-buddies").hidden =
-    this.onConv;
-
-  let detach = document.getElementById("context-detach");
-  detach.hidden = !this.onBuddy;
-  if (this.onBuddy)
-    detach.disabled = this.target.buddy.contact.getBuddies().length == 1;
-
-  document.getElementById("context-openconversation").disabled =
-    !hide && !this.target.canOpenConversation();
-}
-
-// Prototype for buddyListContextMenu "class."
-buddyListContextMenu.prototype = {
-  openConversation: function blcm_openConversation() {
-    if (this.onContact || this.onBuddy || this.onConv)
-      this.target.openConversation();
-  },
-  closeConversation: function blcm_closeConversation() {
-    if (this.onConv)
-      this.target.closeConversation();
-  },
-  alias: function blcm_alias() {
-    if (this.onContact)
-      this.target.startAliasing();
-    else if (this.onBuddy)
-      this.target.contact.startAliasing();
-  },
-  detach: function blcm_detach() {
-    if (!this.onBuddy)
-      return;
-
-    let buddy = this.target.buddy;
-    buddy.contact.detachBuddy(buddy);
-  },
-  delete: function blcm_delete() {
-    let buddy;
-    if (this.onContact)
-      buddy = this.target.contact.preferredBuddy;
-    else if (this.onBuddy)
-      buddy = this.target.buddy;
-    else
-      return;
-
-    let bundle = document.getElementById("instantbirdBundle").stringBundle;
-    let displayName = this.target.displayName;
-    let promptTitle = bundle.formatStringFromName("contact.deletePrompt.title",
-                                                  [displayName], 1);
-    let userName = buddy.userName;
-    if (displayName != userName)
-      displayName += " (" + userName + ")";
-    let proto = buddy.protocol.name; // FIXME build a list
-    let promptMessage = bundle.formatStringFromName("contact.deletePrompt.message",
-                                                    [displayName, proto], 2);
-    let deleteButton = bundle.GetStringFromName("contact.deletePrompt.button");
-    let prompts = Services.prompt;
-    let flags = prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_0 +
-                prompts.BUTTON_TITLE_CANCEL * prompts.BUTTON_POS_1 +
-                prompts.BUTTON_POS_1_DEFAULT;
-    if (prompts.confirmEx(window, promptTitle, promptMessage, flags,
-                          deleteButton, null, null, null, {}))
-      return;
-
-    this.target.delete();
-  },
-  addTag: function blcm_addTag(aTag) {
-    // If the contact already has the tag, addTag will return early.
-    this.tagMenu.target.contact.addTag(aTag);
-  },
-  toggleTag: function blcm_toggleTag(aTag) {
-    let contact = this.tagMenu.target.contact;
-    if (contact.getTags().some(t => t.id == aTag.id))
-      contact.removeTag(aTag);
-    else
-      contact.addTag(aTag);
-  },
-  _getLogs: function blcm_getLogs() {
-    if (this.onContact)
-      return Services.logs.getLogsForContact(this.target.contact, true);
-    if (this.onBuddy)
-      return Services.logs.getLogsForBuddy(this.target.buddy, true);
-    if (this.onConv)
-      return Services.logs.getLogsForConversation(this.target.conv, true);
-    return null;
-  },
-  showLogs: function blcm_showLogs() {
-    this._getLogs().then(aLogs => {
-      if (!aLogs || !aLogs.hasMoreElements())
-        return;
-      window.openDialog("chrome://instantbird/content/viewlog.xul",
-                        "Logs", "chrome,resizable", {logs: aLogs},
-                        this.target.displayName);
-    });
-  },
-  hideTag: function blcm_hideTag() {
-    if (!this.onGroup || this.target.tag.id == -1)
-      return;
-
-    this.target.hide();
-  },
-  visibleTagsPopupShowing: function blcm_visibleTagsPopupShowing() {
-    if (this.onBuddy || this.onContact || this.onConv)
-      return;
-
-    let popup = document.getElementById("context-visible-tags-popup");
-    let item;
-    while ((item = popup.firstChild) && item.localName != "menuseparator")
-      item.remove();
-
-    Services.tags.getTags()
-            .forEach(function (aTag) {
-      item = document.createElement("menuitem");
-      item.setAttribute("label", aTag.name);
-      item.setAttribute("type", "checkbox");
-      let id = aTag.id;
-      item.groupId = id;
-      if (!Services.tags.isTagHidden(aTag))
-        item.setAttribute("checked", "true");
-      popup.insertBefore(item, popup.firstChild);
-    });
-
-    let otherContactsTag = document.getElementById("group-1");
-    [ "context-other-contacts-tag-separator",
-      "context-other-contacts-tag"
-    ].forEach(function (aId) {
-      document.getElementById(aId).hidden = !otherContactsTag;
-    });
-    if (otherContactsTag) {
-      // This avoids having the localizable "Other Contacts" string in
-      // both a .dtd and .properties file.
-      document.getElementById("context-other-contacts-tag").label =
-        otherContactsTag.displayName;
-    }
-  },
-  visibleTags: function blcm_visibleTags(aEvent) {
-    let id = aEvent.originalTarget.groupId;
-    if (!id)
-      return;
-    let tags = Services.tags;
-    let tag = tags.getTagById(id);
-    if (tags.isTagHidden(tag))
-      tags.showTag(tag);
-    else
-      tags.hideTag(tag);
-  },
-  toggleShowOfflineBuddies: function blcm_toggleShowOfflineBuddies() {
-    let newValue =
-      !!document.getElementById("context-show-offline-buddies")
-                .getAttribute("checked");
-    Services.prefs.setBoolPref(showOfflineBuddiesPref, newValue);
-  }
-};
-
-var buddyList = {
-  observe: function bl_observe(aSubject, aTopic, aMsg) {
-    if (aTopic == "prpl-quit") {
-      window.close();
-      return;
-    }
-
-    if (aTopic == "nsPref:changed" && aMsg == showOfflineBuddiesPref) {
-      let showOffline = Services.prefs.getBoolPref(showOfflineBuddiesPref);
-      this._showOffline = showOffline;
-      let item = document.getElementById("context-show-offline-buddies");
-      if (showOffline)
-        item.setAttribute("checked", "true");
-      else
-        item.removeAttribute("checked");
-
-      Services.tags.getTags().forEach(function (aTag) {
-        let elt = document.getElementById("group" + aTag.id);
-        if (elt)
-          elt.showOffline = showOffline;
-        else if (showOffline) {
-          if (Services.tags.isTagHidden(aTag))
-            this.showOtherContacts();
-          else
-            this.displayGroup(aTag);
-        }
-      }, this);
-      let elt = document.getElementById("group-1"); // "Other contacts"
-      if (elt)
-        elt.showOffline = showOffline;
-      return;
-    }
-
-    if (aTopic == "status-changed") {
-      this.displayCurrentStatus();
-      return;
-    }
-
-    if (aTopic == "tag-hidden") {
-      this.showOtherContacts();
-      return;
-    }
-
-    if (aTopic == "tag-shown") {
-      if (!document.getElementById("group" + aSubject.id))
-        this.displayGroup(aSubject);
-      return;
-    }
-
-    if (aTopic == "user-icon-changed") {
-      this.displayUserIcon();
-      return;
-    }
-
-    if (aTopic == "user-display-name-changed") {
-      this.displayUserDisplayName();
-      return;
-    }
-
-    if (aTopic == "ui-conversation-hidden") {
-      let convElt = document.createElement("conv");
-      let name = aSubject.title.toLowerCase();
-      let ref = this.convBox.firstChild;
-      while (ref &&
-             ref.displayName.toLowerCase().localeCompare(name) < 0)
-        ref = ref.nextSibling;
-      this.convBox.insertBefore(convElt, ref);
-      convElt.build(aSubject);
-      return;
-    }
-    if (aTopic == "showing-ui-conversation") {
-      if (this.convBox.listedConvs.hasOwnProperty(aSubject.id))
-        this.convBox.listedConvs[aSubject.id].removeNode();
-      return;
-    }
-
-    if (aTopic == "buddy-authorization-request") {
-      aSubject.QueryInterface(Ci.prplIBuddyRequest);
-      let bundle = document.getElementById("instantbirdBundle").stringBundle;
-      let label = bundle.formatStringFromName("buddy.authRequest.label",
-                                              [aSubject.userName], 1);
-      let value =
-        "buddy-auth-request-" + aSubject.account.id + aSubject.userName;
-      let acceptButton = {
-        accessKey: bundle.GetStringFromName("buddy.authRequest.allow.accesskey"),
-        label: bundle.GetStringFromName("buddy.authRequest.allow.label"),
-        callback: function() { aSubject.grant(); }
-      };
-      let denyButton = {
-        accessKey: bundle.GetStringFromName("buddy.authRequest.deny.accesskey"),
-        label: bundle.GetStringFromName("buddy.authRequest.deny.label"),
-        callback: function() { aSubject.deny(); }
-      };
-      let box = document.getElementById("buddyListMsg");
-      box.appendNotification(label, value, null, box.PRIORITY_INFO_HIGH,
-                            [acceptButton, denyButton]);
-      window.getAttention();
-      return;
-    }
-    if (aTopic == "buddy-authorization-request-canceled") {
-      aSubject.QueryInterface(Ci.prplIBuddyRequest);
-      let value =
-        "buddy-auth-request-" + aSubject.account.id + aSubject.userName;
-      let notification =
-        document.getElementById("buddyListMsg")
-                .getNotificationWithValue(value);
-      if (notification)
-        notification.close();
-      return;
-    }
-
-    // aSubject is an imIContact
-    if (aSubject.online || this._showOffline) {
-      aSubject.getTags().forEach(function (aTag) {
-        if (Services.tags.isTagHidden(aTag))
-          this.showOtherContacts();
-        else if (!document.getElementById("group" + aTag.id))
-          this.displayGroup(aTag);
-      }, this);
-    }
-  },
-
-  displayUserIcon: function bl_displayUserIcon() {
-    let icon = Services.core.globalUserStatus.getUserIcon();
-    document.getElementById("userIcon").src = icon ? icon.spec : "";
-  },
-
-  displayUserDisplayName: function bl_displayUserDisplayName() {
-    let displayName = Services.core.globalUserStatus.displayName;
-    let elt = document.getElementById("displayName");
-    if (displayName)
-      elt.removeAttribute("usingDefault");
-    else {
-      let bundle = document.getElementById("instantbirdBundle");
-      displayName = bundle.getString("displayNameEmptyText");
-      elt.setAttribute("usingDefault", displayName);
-    }
-    elt.setAttribute("value", displayName);
-  },
-
-  displayStatusType: function bl_displayStatusType(aStatusType) {
-    document.getElementById("statusMessage")
-            .setAttribute("statusType", aStatusType);
-    let statusString = Status.toLabel(aStatusType);
-    let statusTypeIcon = document.getElementById("statusTypeIcon");
-    statusTypeIcon.setAttribute("status", aStatusType);
-    statusTypeIcon.setAttribute("tooltiptext", statusString);
-    return statusString;
-  },
-
-  displayCurrentStatus: function bl_displayCurrentStatus() {
-    let us = Services.core.globalUserStatus;
-    let status = Status.toAttribute(us.statusType);
-    let message = status == "offline" ? "" : us.statusText;
-    let statusString = this.displayStatusType(status);
-    let statusMessage = document.getElementById("statusMessage");
-    if (message)
-      statusMessage.removeAttribute("usingDefault");
-    else {
-      statusMessage.setAttribute("usingDefault", statusString);
-      message = statusString;
-    }
-    statusMessage.setAttribute("value", message);
-    statusMessage.setAttribute("tooltiptext", message);
-  },
-
-  editStatus: function bl_editStatus(aEvent) {
-    let status = aEvent.originalTarget.getAttribute("status");
-    if (status == "offline") {
-      let statusMessage = document.getElementById("statusMessage");
-      if (statusMessage.hasAttribute("editing"))
-        buddyList.finishEditStatusMessage(false);
-      Services.core.globalUserStatus.setStatus(Ci.imIStatusInfo.STATUS_OFFLINE, "");
-    }
-    else if (status)
-      this.startEditStatus(status);
-  },
-
-  startEditStatus: function bl_startEditStatus(aStatusType) {
-    let currentStatusType =
-      document.getElementById("statusTypeIcon").getAttribute("status");
-    if (aStatusType != currentStatusType) {
-      this._statusTypeBeforeEditing = currentStatusType;
-      this._statusTypeEditing = aStatusType;
-      this.displayStatusType(aStatusType);
-    }
-    this.statusMessageClick();
-  },
-
-  statusMessageClick: function bl_statusMessageClick(event) {
-    let statusTypeIcon = document.getElementById("statusTypeIcon");
-    if (event && event.button == 0) {
-      // If the mouse clicked the statusTypeIcon with the primary
-      // button, we should open the dropdown menu. (The statusMessage
-      // "covers" the icon due to its enlarged focusring.)
-      let box = statusTypeIcon.getBoundingClientRect();
-      if (event.clientX >= box.left && event.clientX < box.right &&
-          event.clientY >= box.top && event.clientY < box.bottom) {
-        this.openStatusTypePopup();
-        return;
-      }
-    }
-    let statusType = statusTypeIcon.getAttribute("status");
-    if (statusType == "offline")
-      return;
-
-    let elt = document.getElementById("statusMessage");
-    if (!elt.hasAttribute("editing")) {
-      elt.setAttribute("editing", "true");
-      elt.removeAttribute("role");
-      elt.removeAttribute("aria-haspopup");
-      elt.addEventListener("blur", this.statusMessageBlur);
-      if (elt.hasAttribute("usingDefault")) {
-        if ("_statusTypeBeforeEditing" in this &&
-            this._statusTypeBeforeEditing == "offline")
-          elt.setAttribute("value", Services.core.globalUserStatus.statusText);
-        else
-          elt.removeAttribute("value");
-      }
-      if (!("TextboxSpellChecker" in window))
-        ChromeUtils.import("resource:///modules/imTextboxUtils.jsm");
-      TextboxSpellChecker.registerTextbox(elt);
-      // force binding attachment by forcing layout
-      elt.getBoundingClientRect();
-      elt.select();
-    }
-
-    this.statusMessageRefreshTimer();
-  },
-
-  statusMessageRefreshTimer: function bl_statusMessageRefreshTimer() {
-    const timeBeforeAutoValidate = 20 * 1000;
-    if ("_stopEditStatusTimeout" in this)
-      clearTimeout(this._stopEditStatusTimeout);
-    this._stopEditStatusTimeout = setTimeout(this.finishEditStatusMessage,
-                                             timeBeforeAutoValidate, true);
-  },
-
-  statusMessageBlur: function bl_statusMessageBlur(aEvent) {
-    if (aEvent.originalTarget == document.getElementById("statusMessage").inputField)
-      buddyList.finishEditStatusMessage(true);
-  },
-
-  statusMessageKeyPress: function bl_statusMessageKeyPress(aEvent) {
-    let editing = document.getElementById("statusMessage").hasAttribute("editing");
-    if (!editing) {
-      switch (aEvent.keyCode) {
-        case aEvent.DOM_VK_DOWN:
-          buddyList.openStatusTypePopup();
-          aEvent.preventDefault();
-          return;
-
-        case aEvent.DOM_VK_TAB:
-          break;
-
-        default:
-          if (aEvent.charCode == aEvent.DOM_VK_SPACE)
-            buddyList.statusMessageClick();
-          return;
-      }
-    }
-    switch (aEvent.keyCode) {
-      case aEvent.DOM_VK_RETURN:
-        buddyList.finishEditStatusMessage(true);
-        break;
-
-      case aEvent.DOM_VK_ESCAPE:
-        buddyList.finishEditStatusMessage(false);
-        break;
-
-      case aEvent.DOM_VK_TAB:
-        if (aEvent.shiftKey)
-          break;
-        // Ensure some item is selected when navigating by keyboard.
-        if (!this.selectFirstItem("convlistbox"))
-          this.selectFirstItem("buddylistbox");
-        break;
-
-      default:
-        buddyList.statusMessageRefreshTimer();
-    }
-  },
-
-  finishEditStatusMessage: function bl_finishEditStatusMessage(aSave) {
-    clearTimeout(this._stopEditStatusTimeout);
-    delete this._stopEditStatusTimeout;
-    let elt = document.getElementById("statusMessage");
-    if (aSave) {
-      let newStatus = Ci.imIStatusInfo.STATUS_UNKNOWN;
-      if ("_statusTypeEditing" in this) {
-        let statusType = this._statusTypeEditing;
-        if (statusType == "available")
-          newStatus = Ci.imIStatusInfo.STATUS_AVAILABLE;
-        else if (statusType == "unavailable")
-          newStatus = Ci.imIStatusInfo.STATUS_UNAVAILABLE;
-        else if (statusType == "offline")
-          newStatus = Ci.imIStatusInfo.STATUS_OFFLINE;
-        delete this._statusTypeBeforeEditing;
-        delete this._statusTypeEditing;
-      }
-      // apply the new status only if it is different from the current one
-      if (newStatus != Ci.imIStatusInfo.STATUS_UNKNOWN ||
-          elt.value != elt.getAttribute("value"))
-        Services.core.globalUserStatus.setStatus(newStatus, elt.value);
-    }
-    else if ("_statusTypeBeforeEditing" in this) {
-      this.displayStatusType(this._statusTypeBeforeEditing);
-      delete this._statusTypeBeforeEditing;
-      delete this._statusTypeEditing;
-    }
-
-    if (elt.hasAttribute("usingDefault"))
-      elt.setAttribute("value", elt.getAttribute("usingDefault"));
-    TextboxSpellChecker.unregisterTextbox(elt);
-    elt.removeAttribute("editing");
-    elt.setAttribute("role", "button");
-    elt.setAttribute("aria-haspopup", "true");
-    elt.removeEventListener("blur", this.statusMessageBlur);
-    if (!elt.getAttribute("focused"))
-      return;
-    // Force layout to remove input binding.
-    elt.getBoundingClientRect();
-    elt.focus();
-  },
-
-  openStatusTypePopup: function() {
-    let button = document.getElementById("statusTypeIcon");
-    document.getElementById("setStatusTypeMenupopup").openPopup(button, "after_start");
-  },
-
-  onStatusTypePopupShown: function() {
-    // Without this, the #userIcon gains focus when the popup is opened
-    // from the #statusMessage whenever the #statusMessage has been edited
-    // at least once (thus changing the binding).
-    document.getElementById("statusMessage").focus();
-  },
-
-  userIconKeyPress: function bl_userIconKeyPress(aEvent) {
-    switch (aEvent.keyCode) {
-      case aEvent.DOM_VK_RETURN:
-        this.chooseUserIcon();
-        break;
-
-      case aEvent.DOM_VK_TAB:
-        if (!aEvent.shiftKey)
-          break;
-        // Ensure a contact is selected when navigating by keyboard.
-        this.selectFirstItem("buddylistbox");
-        break;
-
-      default:
-        if (aEvent.charCode == aEvent.DOM_VK_SPACE)
-          this.chooseUserIcon();
-        break;
-    }
-  },
-
-  chooseUserIcon: function bl_chooseUserIcon() {
-    const nsIFilePicker = Ci.nsIFilePicker;
-    let fp = Cc["@mozilla.org/filepicker;1"]
-               .createInstance(nsIFilePicker);
-    let bundle = document.getElementById("instantbirdBundle");
-    fp.init(window, bundle.getString("userIconFilePickerTitle"),
-            nsIFilePicker.modeOpen);
-    fp.appendFilters(nsIFilePicker.filterImages);
-    fp.open(rv => {
-      if (rv != nsIFilePicker.returnOK || !fp.file) {
-        return;
-      }
-      Services.core.globalUserStatus.setUserIcon(fp.file);
-    });
-  },
-
-  webcamSuccessCallback: function bl_webcamSuccessCallback(aStream) {
-    if (document.getElementById("changeUserIconPanel").state != "open" ||
-        document.getElementById("userIconPanel").selectedIndex != 1) {
-      this.stopWebcamStream();
-      return;
-    }
-
-    let video = document.getElementById("webcamVideo");
-    video.srcObject = aStream;
-    video.onplaying = function() { document.getElementById("captureButton")
-                                           .removeAttribute("disabled"); }
-    video.play();
-  },
-
-  takePictureButton: function bl_takePictureButton() {
-    document.getElementById("userIconPanel").selectedIndex = 1;
-    navigator.mediaDevices.getUserMedia({audio: false, video: true})
-             .then(aStream => this.webcamSuccessCallback(aStream),
-                   Cu.reportError);
-  },
-
-  takePicture: function bl_takePicture() {
-    document.getElementById("userIconPanel").selectedIndex = 2;
-    let canvas = document.getElementById("userIconCanvas");
-    let ctx    = canvas.getContext("2d");
-    ctx.save();
-    let video = document.getElementById("webcamVideo");
-    ctx.drawImage(video, 80, 0, 480, 480, 0, 0, canvas.height, canvas.height);
-    document.getElementById("webcamPhoto")
-            .setAttribute("src", canvas.toDataURL("image/png"));
-    ctx.restore();
-  },
-
-  captureBackButton: function bl_captureBackButton() {
-    document.getElementById("userIconPanel").selectedIndex = 0;
-    document.getElementById("webcamPhoto").removeAttribute("src");
-    this.stopWebcamStream();
-  },
-
-  retake: function bl_retake() {
-    document.getElementById("userIconPanel").selectedIndex = 1;
-  },
-
-  removeUserIcon: function bl_removeUserIcon() {
-    Services.core.globalUserStatus.setUserIcon(null);
-    document.getElementById("changeUserIconPanel").hidePopup();
-  },
-
-  setWebcamImage: function bl_setWebcamImage() {
-    let canvas = document.getElementById("userIconCanvas");
-    canvas.toBlob(function(blob) {
-      let read = new FileReader();
-      read.addEventListener("loadend", function() {
-        // FIXME: This is a workaround for Bug 1011878.
-        // Writing the new icon to a temporary file and then creating an
-        // nsIFile to pass it to Service.core is a temporary fix.
-        // An ArrayBufferView is needed as input to OS.File.WriteAtomic. Any
-        // other would have worked too.
-        let view      = new Int8Array(read.result);
-        let newName   = OS.Path.join(OS.Constants.Path.tmpDir, "tmpUserIcon.png");
-        let writeFile = OS.File.writeAtomic(newName, view);
-        document.getElementById("changeUserIconPanel").hidePopup();
-        writeFile.then(function() {
-          let userIconFile = Cc["@mozilla.org/file/local;1"]
-                             .createInstance(Ci.nsIFile);
-          userIconFile.initWithPath(newName);
-          Services.core.globalUserStatus.setUserIcon(userIconFile);
-          userIconFile.remove(newName);
-        });
-      });
-      read.readAsArrayBuffer(blob);
-    }, "image/png", 1.0);
-  },
-
-  updateUserIconPanelItems: function bl_updateUserIconPanelItems() {
-    document.getElementById("userIconPanel").selectedIndex = 0;
-    let icon = Services.core.globalUserStatus.getUserIcon();
-    document.getElementById("userIconPanelImage").src = icon ? icon.spec : "";
-
-    let webcamButton = document.getElementById("takePictureButton");
-    webcamButton.disabled = true;
-    navigator.mediaDevices.enumerateDevices().then(aDevices => {
-      webcamButton.disabled =
-        !aDevices.some(aDevice => aDevice.kind == "videoinput");
-    }, Cu.reportError);
-  },
-
-  stopWebcamStream: function bl_stopWebcamStream() {
-    let webcamVideo = document.getElementById("webcamVideo");
-    let webcamStream = webcamVideo.srcObject;
-    if (webcamStream) {
-      webcamStream.stop();
-      webcamVideo.srcObject = null;
-    }
-
-    document.getElementById("captureButton").disabled = true;
-    document.getElementById("webcamPhoto").removeAttribute("src");
-  },
-
-  displayNameClick: function bl_displayNameClick() {
-    let elt = document.getElementById("displayName");
-    if (!elt.hasAttribute("editing")) {
-      elt.setAttribute("editing", "true");
-      elt.removeAttribute("role");
-      if (elt.hasAttribute("usingDefault"))
-        elt.removeAttribute("value");
-      elt.addEventListener("blur", this.displayNameBlur);
-      // force binding attachment by forcing layout
-      elt.getBoundingClientRect();
-      elt.select();
-    }
-
-    this.displayNameRefreshTimer();
-  },
-
-  _stopEditDisplayNameTimeout: 0,
-  displayNameRefreshTimer: function bl_displayNameRefreshTimer() {
-    const timeBeforeAutoValidate = 20 * 1000;
-    clearTimeout(this._stopEditDisplayNameTimeout);
-    this._stopEditDisplayNameTimeout =
-      setTimeout(this.finishEditDisplayName, timeBeforeAutoValidate, true);
-  },
-
-  displayNameBlur: function bl_displayNameBlur(aEvent) {
-    if (aEvent.originalTarget == document.getElementById("displayName").inputField)
-      buddyList.finishEditDisplayName(true);
-  },
-
-  displayNameKeyPress: function bl_displayNameKeyPress(aEvent) {
-    let editing = document.getElementById("displayName").hasAttribute("editing");
-    if (!editing) {
-      if (aEvent.charCode == aEvent.DOM_VK_SPACE)
-        buddyList.displayNameClick();
-      return;
-    }
-    switch (aEvent.keyCode) {
-      case aEvent.DOM_VK_RETURN:
-        buddyList.finishEditDisplayName(true);
-        break;
-
-      case aEvent.DOM_VK_ESCAPE:
-        buddyList.finishEditDisplayName(false);
-        break;
-
-      default:
-        buddyList.displayNameRefreshTimer();
-    }
-  },
-
-  finishEditDisplayName: function bl_finishEditDisplayName(aSave) {
-    clearTimeout(this._stopEditDisplayNameTimeout);
-    let elt = document.getElementById("displayName");
-    // Apply the new display name only if it is different from the current one.
-    if (aSave && elt.value != elt.getAttribute("value"))
-      Services.core.globalUserStatus.displayName = elt.value;
-    else if (elt.hasAttribute("usingDefault"))
-      elt.setAttribute("value", elt.getAttribute("usingDefault"));
-
-    elt.removeAttribute("editing");
-    elt.setAttribute("role", "button");
-    elt.removeEventListener("blur", this.displayNameBlur);
-    if (!elt.getAttribute("focused"))
-      return;
-    // Force layout to remove input binding.
-    elt.getBoundingClientRect();
-    elt.focus();
-  },
-
-  load: function bl_load() {
-    var blistWindows = Services.wm.getEnumerator("Messenger:blist");
-    while (blistWindows.hasMoreElements()) {
-      var win = blistWindows.getNext();
-      if (win != window) {
-        win.QueryInterface(Ci.nsIDOMWindow).focus();
-        window.close();
-        return;
-      }
-    }
-
-    // Move the window to the right of the screen on new profiles.
-    let docElt = document.documentElement;
-    if (!docElt.hasAttribute("height")) {
-      docElt.setAttribute("height", screen.availHeight || 600);
-      let width = parseInt(docElt.getAttribute("width"));
-      window.moveTo(screen.availLeft + screen.availWidth - width,
-                    screen.availTop);
-    }
-
-    // TODO remove this once we cleanup the way the menus are inserted
-    let menubar = document.getElementById("blistMenubar");
-    let statusArea = document.getElementById("statusArea");
-    statusArea.parentNode.insertBefore(menubar, statusArea);
-
-    buddyList.displayCurrentStatus();
-    buddyList.displayUserDisplayName();
-    buddyList.displayUserIcon();
-
-    let prefBranch = Services.prefs;
-    buddyList._showOffline = prefBranch.getBoolPref(showOfflineBuddiesPref);
-    if (buddyList._showOffline) {
-      document.getElementById("context-show-offline-buddies")
-              .setAttribute("checked", "true");
-    }
-
-    // Find the correct height of a contact list item. This can vary depending
-    // on the platform font and font size.
-    let dummyContact = document.getElementById("dummyContact");
-    let contactHeight = dummyContact.getBoundingClientRect().height;
-    document.getElementById("buddyListMsg")
-            .style.setProperty("--blist-item-height", contactHeight + "px");
-
-    let blistBox = document.getElementById("buddylistbox");
-    blistBox.removeGroup = function(aGroupElt) {
-      let index = buddyList._displayedGroups.indexOf(aGroupElt);
-      if (index != -1)
-        buddyList._displayedGroups.splice(index, 1);
-      aGroupElt.remove();
-    };
-    let showOtherContacts = false;
-    Services.tags.getTags().forEach(function (aTag) {
-      if (Services.tags.isTagHidden(aTag))
-        showOtherContacts = true;
-      else
-        buddyList.displayGroup(aTag);
-    });
-    if (showOtherContacts)
-      buddyList.showOtherContacts();
-    blistBox.focus();
-
-    buddyList.convBox = document.getElementById("convlistbox");
-    buddyList.convBox.listedConvs = {};
-    buddyList.convBox._updateListConvCount = function() {
-      let count = Object.keys(this.listedConvs).length;
-      this.parentNode.setAttribute("listedConvCount", count);
-    }.bind(buddyList.convBox);
-    let convs = Services.conversations.getUIConversations();
-    if (convs.length != 0) {
-      if (!("Conversations" in window))
-        ChromeUtils.import("resource:///modules/imWindows.jsm");
-      convs.sort((a, b) =>
-        a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
-      for (let conv of convs) {
-        if (!Conversations.isUIConversationDisplayed(conv)) {
-          let convElt = document.createElement("conv");
-          buddyList.convBox.appendChild(convElt);
-          convElt.build(conv);
-        }
-      }
-      buddyList.convBox._updateListConvCount();
-    }
-    new MutationObserver(buddyList.convBox._updateListConvCount)
-      .observe(buddyList.convBox, {childList: true});
-
-    prefBranch.addObserver(showOfflineBuddiesPref, buddyList);
-    for (let event of events)
-      Services.obs.addObserver(buddyList, event);
-
-    this.addEventListener("unload", buddyList.unload);
-  },
-  _displayedGroups: [],
-  _getGroupIndex: function(aName) {
-    let start = 0;
-    let end = this._displayedGroups.length;
-    let name = aName.toLowerCase();
-    while (start < end) {
-      let middle = start + Math.floor((end - start) / 2);
-      if (name < this._displayedGroups[middle].displayName.toLowerCase())
-        end = middle;
-      else
-        start = middle + 1;
-    }
-    return end;
-  },
-  displayGroup: function(aTag) {
-    let blistBox = document.getElementById("buddylistbox");
-    let groupElt = document.createElement("group");
-    let index;
-    let ref = null;
-    if (aTag.id != -1) {
-      index = this._getGroupIndex(aTag.name);
-      if (index == this._displayedGroups.length)
-        ref = document.getElementById("group-1"); // 'Other Contacts'
-      else
-        ref = this._displayedGroups[index];
-    }
-    blistBox.insertBefore(groupElt, ref);
-
-    if (this._showOffline)
-      groupElt._showOffline = true;
-    if (!groupElt.build(aTag))
-      groupElt.remove();
-    else if (index !== undefined)
-      this._displayedGroups.splice(index, 0, groupElt);
-  },
-  _showOtherContactsRequested: false,
-  showOtherContacts: function bl_showOtherContacts() {
-    if (this._showOtherContactsRequested)
-      return;
-    this._showOtherContactsRequested = true;
-    setTimeout(function(aSelf) {
-      if (!document.getElementById("group-1"))
-        aSelf.displayGroup(Services.tags.otherContactsTag);
-      aSelf._showOtherContactsRequested = false;
-    }, 0, this);
-  },
-  onblur: function bl_onblur() {
-    // Clear the buddy list selection. Contacts expand to two lines
-    // when selected, but only when the buddy list has focus. This makes
-    // it hard to select the right contact by clicking on an unfocused
-    // contact list, as the contact will reexpand before the click is handled.
-    document.getElementById("buddylistbox").clearSelection();
-  },
-  unload: function bl_unload() {
-    for (let event of events)
-      Services.obs.removeObserver(buddyList, event);
-    Services.prefs.removeObserver(showOfflineBuddiesPref, buddyList);
-   },
-
-  selectFirstItem: function (aListboxID) {
-    let listbox = document.getElementById(aListboxID);
-    if (!listbox.itemCount)
-      return false;
-    if (listbox.selectedIndex == -1)
-      listbox.selectedIndex = 0;
-    return true;
-  },
-
-  // Handle key pressing
-  keyPress: function bl_keyPress(aEvent) {
-    let target = aEvent.target;
-    while (target && target.localName != "richlistbox")
-      target = target.parentNode;
-    if (aEvent.keyCode == aEvent.DOM_VK_TAB) {
-      // Ensure some item is selected when navigating by keyboard.
-      if (target.id == "convlistbox" && !aEvent.shiftKey)
-        this.selectFirstItem("buddylistbox");
-      if (target.id == "buddylistbox" && aEvent.shiftKey)
-        this.selectFirstItem("convlistbox");
-      return;
-    }
-    var item = target.selectedItem;
-    if (!item || !item.parentNode) // empty list or item no longer in the list
-      return;
-    item.keyPress(aEvent);
-  },
-
-  buddylistboxFocus: function() {
-    let selectedItem = document.getElementById("buddylistbox").selectedItem;
-    if (selectedItem) {
-      // Ensure binding changes immediately to avoid the firing of a
-      // spurious accessibility focus event referring to the old binding that
-      // causes problems for screen readers (BIO bug 1626, BMO bug 786508)
-      selectedItem.getBoundingClientRect();
-    }
-  },
-
-  // Usually, a scrollable richlistbox will ensure that a newly selected item is
-  // automatically scrolled into view. However, buddylistbox and convlistbox are
-  // both zero-flex children of a flexible notification box, and don't have
-  // scrollboxes themselves - so it's necessary to manually set the scroll of the
-  // notification box when an item is selected to ensure its visibility.
-  listboxSelect: function(event) {
-    if (!event.target.selectedItem)
-      return;
-    let notifbox = document.getElementById('buddyListMsg');
-    let itemBounds = event.target.selectedItem.getBoundingClientRect();
-    let notifboxBounds = notifbox.getBoundingClientRect();
-    // The offset of the top of the notification box from the top of the item.
-    let offsetAboveTop = notifboxBounds.top - itemBounds.top;
-    // The offset of the bottom of the item from the bottom of the notification box.
-    let offsetBelowBottom = itemBounds.top + itemBounds.height -
-                            (notifboxBounds.top + notifboxBounds.height);
-    // If the item is not fully in view, one of the offsets will be positive.
-    if (offsetAboveTop < 0 && offsetBelowBottom < 0)
-      return;
-    if (offsetAboveTop >= 0) {
-      // We need to scroll up to bring the item into view.
-      notifbox.scrollTop -= offsetAboveTop;
-      return;
-    }
-    // We need to scroll down to bring the item into view.
-    notifbox.scrollTop += offsetBelowBottom;
-  }
-};
-
-this.addEventListener("load", buddyList.load);
deleted file mode 100644
--- a/im/content/blist.xul
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/blist.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/blist.css" type="text/css"?>
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-
-<!DOCTYPE window [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %instantbirdDTD;
-  %brandDTD;
-]>
-
-<window
-  id     = "blistWindow"
-  windowtype="Messenger:blist"
-  title  = "&brandShortName;"
-  width  = "200"
-  persist= "width height screenX screenY storeScreenX storeScreenY"
-#ifndef XP_MACOSX
-  onclose= "event.preventDefault(); goQuitApplication();"
-#endif
-  onblur = "buddyList.onblur();"
-  xmlns:html="http://www.w3.org/1999/xhtml"
-  xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/blist.js"/>
-
-  <stringbundle id="instantbirdBundle" src="chrome://instantbird/locale/instantbird.properties"/>
-
-#include menus.xul.inc
-
-#ifdef XP_MACOSX
-  <commandset id="blistCommands">
-    <command id="cmd_close" oncommand="window.close();"/>
-  </commandset>
-
-  <keyset id="blistKeys">
-    <key id="key_close" key="w" modifiers="accel" command="cmd_close"/>
-  </keyset>
-
-#endif
-  <popupset id="mainPopupSet">
-    <tooltip id="imTooltip" type="im"
-             onpopupshowing="return !('_droptarget' in window);"/>
-
-    <menupopup id="buddyListContextMenu"
-               onpopupshowing="if (event.target != this) return true; gBuddyListContextMenu = new buddyListContextMenu(this); return gBuddyListContextMenu.shouldDisplay;"
-               onpopuphiding="if (event.target == this) { gBuddyListContextMenu = null; }">
-      <menuitem id="context-openconversation"
-                label="&openConversationCmd.label;"
-                accesskey="&openConversationCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.openConversation();"/>
-      <menuitem id="context-show-conversation"
-                label="&showConversationCmd.label;"
-                accesskey="&showConversationCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.openConversation();"/>
-      <menuitem id="context-showlogs"
-                label="&showLogsCmd.label;"
-                accesskey="&showLogsCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.showLogs();"/>
-      <menuseparator id="context-close-conversation-separator"/>
-      <menuitem id="context-close-conversation"
-                label="&closeConversationCmd.label;"
-                accesskey="&closeConversationCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.closeConversation();"/>
-      <menuseparator id="context-edit-buddy-separator"/>
-      <menuitem id="context-alias"
-                label="&aliasCmd.label;"
-                accesskey="&aliasCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.alias();"/>
-      <menuitem id="context-detach"
-                label="&detachCmd.label;"
-                accesskey="&detachCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.detach();"/>
-      <menuitem id="context-delete"
-                label="&deleteCmd.label;"
-                accesskey="&deleteCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.delete();"/>
-      <menu id="context-tags"
-            label="&tagsCmd.label;"
-            accesskey="&tagsCmd.accesskey;"/>
-      <menuitem id="context-hide-tag"
-                label="&hideTagCmd.label;"
-                accesskey="&hideTagCmd.accesskey;"
-                oncommand="gBuddyListContextMenu.hideTag();"/>
-      <menu id="context-visible-tags"
-            label="&visibleTagsCmd.label;"
-            accesskey="&visibleTagsCmd.accesskey;">
-        <menupopup id="context-visible-tags-popup"
-                   oncommand="gBuddyListContextMenu.visibleTags(event);"
-                   onpopupshowing="gBuddyListContextMenu.visibleTagsPopupShowing();">
-          <menuseparator id="context-other-contacts-tag-separator"/>
-          <menuitem id="context-other-contacts-tag"
-                    type="checkbox" checked="true" disabled="true"/>
-        </menupopup>
-      </menu>
-      <menuseparator id="context-show-offline-buddies-separator"/>
-      <menuitem id="context-show-offline-buddies"
-                label="&showOfflineContactsCmd.label;"
-                accesskey="&showOfflineContactsCmd.accesskey;"
-                type="checkbox"
-                oncommand="gBuddyListContextMenu.toggleShowOfflineBuddies();"/>
-    </menupopup>
-  </popupset>
-
-  <toolbox id="mainToolbox">
-    <toolbar id="statusArea">
-      <stack id="statusImageStack">
-        <!-- The box around the user icon is a workaround for bug 955673. -->
-        <box id="userIconHolder">
-          <image id="userIcon" role="button" popup="changeUserIconPanel"
-                 aria-label="&userIcon.label;" tooltiptext="&userIcon.label;"/>
-        </box>
-        <panel id="changeUserIconPanel"
-               type="arrow" align="center"
-               onpopupshowing="buddyList.updateUserIconPanelItems();"
-               onpopuphiding="buddyList.stopWebcamStream();">
-          <deck id="userIconPanel">
-            <vbox class="userIconPanelMenu">
-              <stack id="userIconPanelStack" flex="1">
-                <image id="userIconPanelImage"/>
-                <toolbarbutton id="userIconPanelImageRemove"
-                               tooltiptext="&removeIconCmd.label;"
-                               oncommand="buddyList.removeUserIcon();"/>
-              </stack>
-              <toolbarbutton id="selectFileButton"
-                             class="userIconPanelButton UIPanelOneButton"
-                             label="&selectFileCmd.label;"
-                             accesskey="&selectFileCmd.accesskey;"
-                             flex="1"
-                             oncommand="buddyList.chooseUserIcon();"/>
-              <toolbarbutton id="takePictureButton"
-                             class="userIconPanelButton UIPanelOneButton"
-                             label="&takePictureCmd.label;"
-                             accesskey="&takePictureCmd.accesskey;"
-                             disabled="true" flex="1"
-                             oncommand="buddyList.takePictureButton();"/>
-            </vbox>
-            <vbox class="userIconPanelMenu">
-              <box id="webcamOverflow">
-                <html:video id="webcamVideo"/>
-              </box>
-              <html:canvas id="userIconCanvas" width="160" height="160"/>
-              <hbox class="takePictureButtons">
-                <button id="captureBackButton" class="userIconPanelButton"
-                        label="&captureBackCmd.label;"
-                        accesskey="&captureBackCmd.accesskey;"
-                        flex="1"
-                        oncommand="buddyList.captureBackButton();"/>
-                <button id="captureButton" class="userIconPanelButton"
-                        label="&captureCmd.label;"
-                        accesskey="&captureCmd.accesskey;"
-                        disabled="true" flex="1"
-                        oncommand="buddyList.takePicture();"/>
-              </hbox>
-            </vbox>
-            <vbox class="userIconPanelMenu">
-              <image id="webcamPhoto"/>
-              <hbox class="takePictureButtons">
-                <button id="retakeButton" class="userIconPanelButton"
-                        label="&retakeCmd.label;"
-                        accesskey="&retakeCmd.accesskey;"
-                        flex="1"
-                        oncommand="buddyList.retake();"/>
-                <button id="setIconButton" class="userIconPanelButton"
-                        label="&setIconCmd.label;"
-                        accesskey="&setIconCmd.accesskey;"
-                        flex="1"
-                        oncommand="buddyList.setWebcamImage();"/>
-              </hbox>
-            </vbox>
-          </deck>
-        </panel>
-        <button type="menu" id="statusTypeIcon" status="available">
-          <menupopup id="setStatusTypeMenupopup"
-                     onpopupshown="buddyList.onStatusTypePopupShown();"
-                     oncommand="buddyList.editStatus(event);">
-            <menuitem id="statusTypeAvailable" label="&available;"
-                      status="available" class="menuitem-iconic"
-                      accesskey="&available.accesskey;"/>
-            <menuitem id="statusTypeUnavailable" label="&unavailable;"
-                      status="unavailable" class="menuitem-iconic"
-                      accesskey="&unavailable.accesskey;"/>
-            <menuseparator id="statusTypeOfflineSeparator"/>
-            <menuitem id="statusTypeOffline" label="&offline;"
-                      status="offline" class="menuitem-iconic"
-                      accesskey="&offline.accesskey;"/>
-          </menupopup>
-        </button>
-      </stack>
-      <stack id="displayNameAndstatusMessageStack" flex="1">
-        <vbox flex="1" pack="center">
-          <label id="displayName" role="button"
-                 onclick="buddyList.displayNameClick();"
-                 onkeypress="buddyList.displayNameKeyPress(event);"/>
-        </vbox>
-        <label id="statusMessage" crop="end" value=""
-               aria-haspopup="true" role="button"
-               onclick="buddyList.statusMessageClick(event);"
-               onkeypress="buddyList.statusMessageKeyPress(event);"/>
-      </stack>
-    </toolbar>
-  </toolbox>
-
-  <notificationbox id="buddyListMsg" flex="1" listedConvCount="0"
-                   context="buddyListContextMenu">
-    <label id="convsHeader" value="&convsHeader.label;"
-           control="convlistbox"
-           crop="end" class="listboxHeader"/>
-    <richlistbox id="convlistbox"
-                 onkeypress="buddyList.keyPress(event);"
-                 onselect="buddyList.listboxSelect(event);"
-                 tooltip="imTooltip"/>
-    <label id="contactsHeader" value="&contactsHeader.label;"
-           control="buddylistbox"
-           crop="end" class="listboxHeader"/>
-    <richlistbox id="buddylistbox"
-                 onkeypress="buddyList.keyPress(event);"
-                 onfocus="buddyList.buddylistboxFocus();"
-                 onselect="buddyList.listboxSelect(event);"
-                 tooltip="imTooltip"/>
-    <richlistbox id="dummylistbox">
-      <contact id="dummyContact" displayname="&dummyContact.label;"
-               state="visible" status="unknown"/>
-    </richlistbox>
-    <spacer id="listSpacer" flex="1"
-            onclick='document.getElementById("buddylistbox").focus();'/>
-  </notificationbox>
-</window>
deleted file mode 100644
--- a/im/content/buddy.xml
+++ /dev/null
@@ -1,280 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd" >
-  %instantbirdDTD;
-]>
-
-<bindings id="buddyBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl"
-          xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <binding id="buddy" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content align="center">
-      <xul:stack class="prplBuddyIcon" mousethrough="always">
-        <xul:image class="protoIcon" xbl:inherits="src=iconPrpl,status"/>
-        <xul:image class="statusIcon" xbl:inherits="status"/>
-      </xul:stack>
-      <xul:label crop="end" flex="1" mousethrough="always"
-                 anonid="displayname" class="buddyDisplayName blistDisplayName"
-                 xbl:inherits="value=displayname,status"/>
-      <xul:label crop="end" flex="100000" mousethrough="always"
-                 anonid="statusText" class="buddyStatusText"
-                 xbl:inherits="value=statusText"/>
-    </content>
-    <implementation implements="nsIObserver">
-
-     <destructor>
-      <![CDATA[
-        if (this.buddy) {
-          this.buddy.removeObserver(this);
-          delete this.buddy;
-        }
-      ]]>
-     </destructor>
-
-     <method name="build">
-      <parameter name="aBuddy"/>
-      <parameter name="aContact"/>
-      <body>
-      <![CDATA[
-        this.buddy = aBuddy;
-        this.contact = aContact;
-        this.buddy.addObserver(this);
-
-        this.state = "showing";
-        this.addEventListener("transitionend", this._transitionEnd, true);
-      ]]>
-      </body>
-     </method>
-
-     <property name="displayName"
-               onget="return this.buddy.displayName;"/>
-
-     <property name="state"
-               onget="return this.getAttribute('state');"
-               onset="this.setAttribute('state', val); return val;"/>
-
-     <!-- nsIObserver implementation -->
-     <method name="observe">
-       <parameter name="aSubject"/>
-       <parameter name="aTopic"/>
-       <parameter name="aData"/>
-       <body>
-       <![CDATA[
-         if (aTopic == "buddy-display-name-changed" ||
-             aTopic == "buddy-status-changed") {
-           this.update();
-           return;
-         }
-
-         if (aTopic == "buddy-removed" ||
-             aTopic == "buddy-moved-out-of-contact")
-           this.removeNode();
-       ]]>
-       </body>
-     </method>
-
-     <method name="update">
-      <body>
-      <![CDATA[
-        this.setAttribute("displayname", this.buddy.displayName);
-
-        let statusText = this.buddy.statusText;
-        if (statusText)
-          statusText = " - " + statusText;
-        this.setAttribute("statusText", statusText);
-        this.setAttribute("status", Status.toAttribute(this.buddy.statusType));
-
-        let proto = this.buddy.protocol;
-        this.setAttribute("iconPrpl", proto.iconBaseURI + "icon.png");
-      ]]>
-      </body>
-     </method>
-
-     <method name="_transitionEnd">
-      <body>
-      <![CDATA[
-        let state = this.state;
-        if (state == "showing") {
-          this.update();
-          this.state = "visible";
-        }
-        else if (state == "collapsing")
-          this.remove();
-      ]]>
-      </body>
-     </method>
-
-     <method name="removeNode">
-      <body>
-      <![CDATA[
-        if (!("buddy" in this))
-          return;
-        this.buddy.removeObserver(this);
-        delete this.buddy;
-        if (this.state == "visible") // FIXME check the heigh instead
-          this.state = "collapsing";
-        else
-          this.remove();
-      ]]>
-      </body>
-     </method>
-
-     <method name="delete">
-      <body>
-      <![CDATA[
-        this.buddy.remove();
-      ]]>
-      </body>
-     </method>
-
-     <method name="canOpenConversation">
-      <body>
-       <![CDATA[
-         return this.buddy.canSendMessage;
-       ]]>
-      </body>
-     </method>
-
-     <method name="openConversation">
-      <body>
-       <![CDATA[
-         if (!("Conversations" in window))
-           ChromeUtils.import("resource:///modules/imWindows.jsm");
-         Conversations.focusConversation(this.buddy.createConversation());
-       ]]>
-      </body>
-     </method>
-
-     <method name="_DragOk">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        aEvent.preventDefault();
-        if (this.hasAttribute("droptarget"))
-          return;
-        if ("_droptarget" in window)
-          window._droptarget.removeAttribute("droptarget");
-        window._droptarget = this;
-        this.setAttribute("droptarget", "true");
-      ]]>
-      </body>
-     </method>
-     <method name="_DragLeave">
-      <body>
-      <![CDATA[
-        if (!this.hasAttribute("droptarget"))
-          return;
-        delete window._droptarget;
-        this.removeAttribute("droptarget");
-      ]]>
-      </body>
-     </method>
-     <method name="_checkDrag">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        if (this.state != "visible")
-          return;
-
-        let dt = aEvent.dataTransfer;
-        if (dt.types.includes("application/x-ib-contact")) {
-          if (dt.getData("application/x-ib-contact") != this.buddy.contact.id)
-            this._DragOk(aEvent);
-          aEvent.stopPropagation();
-        }
-        else if (dt.types.includes("application/x-ib-buddy")) {
-          if (dt.getData("application/x-ib-buddy") != this.buddy.id)
-            this._DragOk(aEvent);
-          aEvent.stopPropagation();
-        }
-      ]]>
-      </body>
-     </method>
-    </implementation>
-    <handlers>
-     <handler event="click" clickcount="2">
-       <![CDATA[
-         if (canOpenConversation())
-           openConversation();
-         event.stopPropagation();
-       ]]>
-     </handler>
-
-     <handler event="dragstart">
-       <![CDATA[
-         if (this.state != "visible")
-           return;
-
-         event.dataTransfer.setData("application/x-ib-buddy",
-                                    this.buddy.id);
-         event.stopPropagation();
-       ]]>
-     </handler>
-     <handler event="drop">
-       <![CDATA[
-         if (this.hasAttribute("dummy")) {
-           // Droppped onto the drop target. The event will bubble to
-           // the contact.
-           return;
-         }
-         let contact = this.buddy.contact;
-         let dt = event.dataTransfer;
-         if (dt.types.includes("application/x-ib-contact")) {
-           let id = dt.getData("application/x-ib-contact");
-           contact.mergeContact(Services.contacts.getContactById(id));
-         }
-         else if (dt.types.includes("application/x-ib-buddy")) {
-           let id = dt.getData("application/x-ib-buddy");
-           let from = Services.contacts.getBuddyById(id);
-           if (from.contact.id != contact.id)
-             contact.adoptBuddy(from);
-           contact.moveBuddyBefore(from, this.buddy);
-         }
-         else
-           throw "Invalid drop on buddy!";
-         event.stopPropagation();
-         this._DragLeave();
-       ]]>
-     </handler>
-     <handler event="dragenter">
-       <![CDATA[
-         this._checkDrag(event);
-       ]]>
-     </handler>
-     <handler event="dragover">
-       <![CDATA[
-         this._checkDrag(event);
-       ]]>
-     </handler>
-     <handler event="dragleave">
-       <![CDATA[
-         this._DragLeave();
-       ]]>
-     </handler>
-    </handlers>
-  </binding>
-
-  <binding id="buddy-dummy" extends="chrome://instantbird/content/buddy.xml#buddy">
-    <content align="center">
-      <xul:image class="dummyBuddyIcon"/>
-      <xul:label crop="end" flex="1" class="buddyDisplayName dummyBuddyLabel"
-                 value="&contactDropTarget2;" tooltiptext="&contactDropTarget2;"/>
-    </content>
-    <implementation>
-     <method name="removeNode">
-      <body>
-      <![CDATA[
-        this.remove();
-      ]]>
-      </body>
-     </method>
-    </implementation>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/contact.xml
+++ /dev/null
@@ -1,645 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd" >
-  %instantbirdDTD;
-]>
-
-<bindings id="contactBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl"
-          xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <binding id="contact" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content>
-      <xul:hbox flex="1" class="contact-hbox" mousethrough="always" align="center">
-        <xul:stack class="prplBuddyIcon" mousethrough="always">
-          <xul:image class="protoIcon" xbl:inherits="src=iconPrpl,status"/>
-          <xul:image class="statusIcon" xbl:inherits="status"/>
-        </xul:stack>
-        <xul:label crop="end" flex="1" mousethrough="always"
-                   anonid="displayname" class="contactDisplayName blistDisplayName"
-                   xbl:inherits="value=displayname,status"/>
-        <xul:label crop="end" flex="100000" mousethrough="always"
-                   anonid="statusText" class="contactStatusText"
-                   xbl:inherits="value=statusTextWithDash"/>
-        <xul:button anonid="startChatBubble" class="startChatBubble"
-                    tooltiptext="&openConversationCmd.label;"/>
-      </xul:hbox>
-    </content>
-    <implementation implements="nsIObserver">
-
-     <destructor>
-      <![CDATA[
-        if (this.contact)
-          this.destroy();
-      ]]>
-     </destructor>
-
-     <method name="build">
-      <parameter name="aContact"/>
-      <parameter name="aGroup"/>
-      <body>
-      <![CDATA[
-        this.group = aGroup;
-        this.contact = aContact;
-        this.contact.addObserver(this);
-        this.addEventListener("transitionend", this._transitionEnd, true);
-
-        new MutationObserver(function(aMutations) {
-          if (!this.getAttribute("selected"))
-            return;
-
-          // Ensure binding changes immediately to avoid the firing of a
-          // spurious accessibility focus event referring to the old binding
-          // that causes problems for screen readers (bugs BIO 1626, BMO 786508)
-          this.getBoundingClientRect();
-        }.bind(this)).observe(this, {attributes: true,
-                                     attributeFilter: ["selected"]});
-
-        // Don't do the animation if inside a closed group
-        this.state = this.hasAttribute("collapsed") ? "collapsed" : "showing";
-      ]]>
-      </body>
-     </method>
-
-     <property name="displayName"
-               onget="return this.contact.displayName;"/>
-
-     <property name="state"
-               onget="return this.getAttribute('state');">
-       <setter>
-         <![CDATA[
-           this.setAttribute('state', val);
-           if ("_transitionTimer" in this) {
-             clearTimeout(this._transitionTimer);
-             delete this._transitionTimer;
-           }
-
-           // If the new state will start a transition, add a timer to ensure
-           // it will actually be finished (see bug 675).
-           let delay;
-           if (val == "showing" || val == "collapsing")
-             delay = 200;
-           else if (val == "fading")
-             delay = 400 + 1000; // 400ms + 1000ms before starting
-           else
-             return val;
-
-           this._transitionTimer =
-             setTimeout(this._transitionEnd.bind(this), delay + 100);
-           return val;
-         ]]>
-       </setter>
-     </property>
-
-     <property name="collapsed"
-               onget="return !!this.getAttribute('collapsed');">
-       <setter>
-         <![CDATA[
-           if (val) {
-             let state = this.state;
-             if (state == "fading" || state == "collapsing") {
-               if (state == "fading")
-                 this.destroy();
-               this.remove();
-               return;
-             }
-             this.setAttribute("collapsed", val);
-             this.state = "collapsed";
-           }
-           else {
-             this.removeAttribute("collapsed");
-             this.state = "visible";
-             this.update();
-           }
-         ]]>
-       </setter>
-     </property>
-
-     <property name="bundle">
-       <getter>
-         <![CDATA[
-          if (!this._bundle) {
-            this._bundle =
-              Services.strings.createBundle("chrome://instantbird/locale/instantbird.properties");
-          }
-          return this._bundle;
-         ]]>
-       </getter>
-     </property>
-
-     <!-- Textual representation of the contact and its status for accessibility
-          tools -->
-     <property name="label" readonly="true">
-       <getter>
-       <![CDATA[
-         let params = [this.contact.displayName, this.getAttribute("statusText")];
-         return this.bundle.formatStringFromName("contact.collapsed", params,
-                                                 params.length);
-       ]]>
-       </getter>
-     </property>
-
-     <!-- nsIObserver implementation -->
-     <method name="observe">
-       <parameter name="aSubject"/>
-       <parameter name="aTopic"/>
-       <parameter name="aData"/>
-       <body>
-       <![CDATA[
-         if (!("contact" in this)) {
-           /* groups usually receive contact notifications after contacts.
-              However the 'Other Contacts' group uses the contact notifications
-              to fire group notifications, so if we are displayed inside the
-              'Other Contacts' group, we may receive notifications here
-              even though we have already attempted to remove our observer.
-              Just ignore these notifications.
-            */
-           return;
-         }
-
-         if (aTopic == "contact-preferred-buddy-changed" ||
-             aTopic == "contact-display-name-changed" ||
-             aTopic == "contact-status-changed")
-           this.update();
-         else if (aTopic == "contact-signed-on") {
-           if (this.state == "fading") {
-             // If the contact is fading out because it's no longer in this group,
-             // ignore the signed-on notification; otherwise cancel the animation.
-             let groupId = this.group.tag.id;
-             if (this.contact.getTags().some(t => t.id == groupId))
-               this.state = "visible";
-           }
-         }
-         else if (aTopic == "contact-removed" ||
-                  (aTopic == "contact-moved-out" && aSubject.id == this.group.tag.id) ||
-                  (aTopic == "contact-signed-off" && !this.group.showOffline))
-           this.removeNode();
-         else if (aTopic == "buddy-moved-out-of-contact" && this.hasAttribute("open") &&
-                  this.childNodes.length == 2) {
-           let buddyElt = document.createElement("buddy");
-           buddyElt.setAttribute("dummy", "true");
-           this.appendChild(buddyElt);
-         }
-         else if (aTopic == "buddy-moved-into-contact" && this.hasAttribute("open")) {
-           let buddyElt = document.createElement("buddy");
-           if (this.childNodes.length > 1 && this.childNodes[1].hasAttribute("dummy"))
-             this.childNodes[1].remove();
-           this.appendChild(buddyElt);
-           buddyElt.build(aSubject, this);
-         }
-         else if (aTopic == "buddy-position-changed" && this.hasAttribute("open")) {
-           let id = aSubject.id;
-           for (let i = 0; i < this.childNodes.length; ++i) {
-             if (this.childNodes[i].buddy.id == id) {
-               this.childNodes[i].removeNode();
-               let newPosition = Number(aData);
-               if (newPosition > i)
-                 ++newPosition;
-               let ref = null;
-               if (newPosition < this.childNodes.length)
-                 ref = this.childNodes[newPosition];
-               let buddyElt = document.createElement("buddy");
-               this.insertBefore(buddyElt, ref);
-               buddyElt.build(aSubject, this);
-               break;
-             }
-           }
-         }
-       ]]>
-       </body>
-     </method>
-
-     <method name="update">
-      <body>
-      <![CDATA[
-        this.setAttribute("displayname", this.contact.displayName);
-
-        let statusText = this.contact.statusText;
-        if (statusText)
-          statusText = " - " + statusText;
-        this.setAttribute("statusTextWithDash", statusText);
-        let statusType = this.contact.statusType;
-        this.setAttribute("statusText", Status.toLabel(statusType) + statusText);
-        this.setAttribute("status", Status.toAttribute(statusType));
-
-        if (this.contact.canSendMessage)
-          this.setAttribute("cansend", "true");
-        else
-          this.removeAttribute("cansend");
-
-        let proto = this.contact.preferredBuddy.protocol;
-        this.setAttribute("iconPrpl", proto.iconBaseURI + "icon.png");
-      ]]>
-      </body>
-     </method>
-
-     <method name="_transitionEnd">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        if ("_transitionTimer" in this) {
-          clearTimeout(this._transitionTimer);
-          delete this._transitionTimer;
-        }
-
-        let state = this.state;
-        if (state == "showing") {
-          this.update();
-          this.state = "visible";
-        }
-        else if (state == "fading") {
-          this.state = "collapsing";
-          this.destroy();
-        }
-        else if (state == "collapsing") {
-          // Ignore events of 'fading' transitions if the timer's already fired.
-          if (aEvent && ("propertyName" in aEvent) &&
-              aEvent.propertyName != "height")
-            return;
-          this.remove();
-        }
-      ]]>
-      </body>
-     </method>
-
-     <method name="destroy">
-      <body>
-      <![CDATA[
-        this.contact.removeObserver(this);
-        this.group.removeContact(this);
-        delete this.contact;
-      ]]>
-      </body>
-     </method>
-
-     <method name="removeNode">
-      <parameter name="aNoFading"/>
-      <body>
-      <![CDATA[
-        let state = this.state;
-        if (this.hasAttribute("collapsed") ||
-            window.getComputedStyle(this).height == "0px") {
-          // If the contact is not visible, remove it immediately (without animation)
-          this.destroy();
-          this.state = "collapsed"; // will remove pending animation timers.
-          this.remove();
-        }
-        else if (state == "showing" || aNoFading) {
-          // We are still doing the expand animation, or we don't want
-          // the fading animation because we aren't actually removing the
-          // contact, but only reordering contacts within the group.
-          this.state = "collapsing";
-          this.destroy();
-        }
-        else if (state != "fading" && state != "collapsing")
-          this.state = "fading";
-      ]]>
-      </body>
-     </method>
-
-     <method name="startAliasing">
-      <body>
-      <![CDATA[
-        if (this.hasAttribute("aliasing"))
-          return; // prevent re-entry.
-
-        // The window may not be focused if "rename" was selected from the
-        // context menu, in which case selecting/focusing the textbox will fail.
-        window.focus();
-        this.setAttribute("aliasing", "true");
-        let textbox =
-          document.getAnonymousElementByAttribute(this, "anonid", "displayname");
-        textbox.getBoundingClientRect(); // force binding attachment by forcing layout
-        textbox.select();
-
-        // Some keys (home/end for example) can make the selected item
-        // of the richlistbox change without producing a blur event on
-        // our textbox. Make sure we watch richlistbox selection changes.
-        this._parentSelectListener = (function(aEvent) {
-          if (aEvent.target == this.parentNode)
-            this.finishAliasing(true);
-        }).bind(this);
-        this.parentNode.addEventListener("select", this._parentSelectListener);
-      ]]>
-      </body>
-     </method>
-
-     <method name="finishAliasing">
-      <parameter name="aSave"/>
-      <body>
-      <![CDATA[
-        if (aSave) {
-          this.contact.alias =
-            document.getAnonymousElementByAttribute(this, "anonid", "displayname").value;
-        }
-        this.removeAttribute("aliasing");
-        this.parentNode.removeEventListener("select", this._parentSelectListener);
-        delete this._parentSelectListener;
-        this.parentNode.focus();
-      ]]>
-      </body>
-     </method>
-
-     <method name="delete">
-      <body>
-      <![CDATA[
-        this.contact.remove();
-      ]]>
-      </body>
-     </method>
-
-     <method name="canOpenConversation">
-      <body>
-       <![CDATA[
-         return this.contact.canSendMessage;
-       ]]>
-      </body>
-     </method>
-
-     <method name="openConversation">
-      <body>
-       <![CDATA[
-         if (!("Conversations" in window))
-           ChromeUtils.import("resource:///modules/imWindows.jsm");
-         Conversations.focusConversation(this.contact.createConversation());
-       ]]>
-      </body>
-     </method>
-
-     <method name="keyPress">
-      <parameter name="aEvent"/>
-      <body>this._keyPress(aEvent);</body>
-     </method>
-     <method name="_keyPress">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        switch (aEvent.keyCode) {
-          // If Enter or Return is pressed, open a new conversation
-          case aEvent.DOM_VK_RETURN:
-            if (this.hasAttribute("aliasing"))
-              this.finishAliasing(true);
-            else if (this.canOpenConversation())
-              this.openConversation();
-            break;
-
-          case aEvent.DOM_VK_F2:
-            if (!this.hasAttribute("aliasing"))
-              this.startAliasing();
-            break;
-
-          case aEvent.DOM_VK_ESCAPE:
-            if (this.hasAttribute("aliasing"))
-              this.finishAliasing(false);
-            break;
-        }
-      ]]>
-      </body>
-     </method>
-
-     <method name="_DragOk">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        aEvent.preventDefault();
-        if (this.hasAttribute("droptarget"))
-          return;
-        if ("_droptarget" in window)
-          window._droptarget.removeAttribute("droptarget");
-        window._droptarget = this;
-        this.setAttribute("droptarget", "true");
-      ]]>
-      </body>
-     </method>
-     <method name="_DragLeave">
-      <body>
-      <![CDATA[
-        if (!this.hasAttribute("droptarget"))
-          return;
-        delete window._droptarget;
-        this.removeAttribute("droptarget");
-      ]]>
-      </body>
-     </method>
-     <method name="_checkDrag">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        if (this.state != "visible")
-          return;
-
-        let dt = aEvent.dataTransfer;
-        if (dt.types.includes("application/x-ib-contact")) {
-          if (dt.getData("application/x-ib-contact") != this.contact.id)
-            this._DragOk(aEvent);
-          else
-            aEvent.stopPropagation();
-        }
-        else if (dt.types.includes("application/x-ib-buddy"))
-          this._DragOk(aEvent);
-      ]]>
-      </body>
-     </method>
-    </implementation>
-    <handlers>
-     <handler event="blur">
-       <![CDATA[
-         if (!this.hasAttribute("aliasing"))
-           return;
-
-         let win =
-           Cc["@mozilla.org/focus-manager;1"]
-             .getService(Ci.nsIFocusManager)
-             .activeWindow;
-         if (win == document.defaultView)
-           finishAliasing(true);
-       ]]>
-     </handler>
-
-     <handler event="mousedown">
-       <![CDATA[
-         if (!this.hasAttribute("aliasing") && canOpenConversation() &&
-             event.originalTarget.getAttribute("anonid") == "startChatBubble")
-           openConversation();
-       ]]>
-     </handler>
-
-     <handler event="click">
-       <![CDATA[
-         if (!this.hasAttribute("aliasing") && canOpenConversation() &&
-             event.detail == 2 &&
-             event.originalTarget.getAttribute("anonid") != "expander")
-           openConversation();
-       ]]>
-     </handler>
-
-     <handler event="dragstart">
-       <![CDATA[
-         if (this.state != "visible")
-           return;
-
-         event.dataTransfer.setData("application/x-ib-contact",
-                                    this.contact.id);
-         event.stopPropagation();
-       ]]>
-     </handler>
-     <handler event="drop">
-       <![CDATA[
-         let dt = event.dataTransfer;
-         if (dt.types.includes("application/x-ib-contact")) {
-           let id = dt.getData("application/x-ib-contact");
-           this.contact.mergeContact(Services.contacts.getContactById(id));
-         }
-         else if (dt.types.includes("application/x-ib-buddy")) {
-           let id = dt.getData("application/x-ib-buddy");
-           let from = Services.contacts.getBuddyById(id);
-           if (from.contact.id != this.contact.id)
-             contact.adoptBuddy(from);
-           else
-             contact.moveBuddyBefore(from);
-         }
-         else
-           throw "Invalid drop on buddy!";
-         this._DragLeave();
-       ]]>
-     </handler>
-     <handler event="dragenter">
-       <![CDATA[
-         this._checkDrag(event);
-       ]]>
-     </handler>
-     <handler event="dragover">
-       <![CDATA[
-         this._checkDrag(event);
-       ]]>
-     </handler>
-     <handler event="dragleave">
-       <![CDATA[
-         this._DragLeave();
-       ]]>
-     </handler>
-    </handlers>
-  </binding>
-
-  <binding id="contact-big" extends="chrome://instantbird/content/contact.xml#contact">
-    <content>
-      <xul:vbox flex="1" class="contact-vbox" mousethrough="always">
-        <xul:hbox flex="1" class="contact-hbox" mousethrough="always" align="center">
-          <xul:stack class="prplBuddyIcon" mousethrough="always">
-            <xul:image class="protoIcon" xbl:inherits="src=iconPrpl,status"/>
-            <xul:image class="statusIcon" xbl:inherits="status"/>
-          </xul:stack>
-          <xul:label crop="end" flex="1" mousethrough="always"
-                     anonid="displayname" class="contactDisplayName blistDisplayName"
-                     xbl:inherits="value=displayname,status"/>
-          <xul:button anonid="startChatBubble" class="startChatBubble"
-                      tooltiptext="&openConversationCmd.label;"/>
-        </xul:hbox>
-
-        <xul:hbox flex="1" class="contact-hbox" mousethrough="always" align="center">
-          <xul:label crop="end" flex="1" mousethrough="always"
-                     anonid="statusText" class="contactStatusText contactIconSpace"
-                     xbl:inherits="value=statusText"/>
-          <xul:button anonid="expander" class="expander-down"
-                      tooltiptextexpand="&expandContactTooltip;"
-                      tooltiptextcollapse="&collapseContactTooltip;"
-                      tooltiptext="&expandContactTooltip;"/>
-        </xul:hbox>
-      </xul:vbox>
-      <xul:vbox anonid="contactBuddies" class="contactBuddies">
-        <children/>
-      </xul:vbox>
-    </content>
-    <implementation>
-     <!-- Textual representation of the contact and its status (and grouped
-          buddies if applicable) for accessibility tools -->
-     <property name="label" readonly="true">
-       <getter>
-       <![CDATA[
-         let propertyName = "contact.collapsed";
-         let params = [this.contact.displayName, this.getAttribute("statusText")];
-         let buddies = this.contact.getBuddies().map(b => b.displayName);
-
-         // Add the list of buddies only if there's more than one to avoid un-
-         // necessary duplication of the same name.
-         if (buddies.length > 1) {
-           propertyName = "contact.expanded";
-           params.push(buddies.join(this.bundle.GetStringFromName("contact.buddySeparator")));
-         }
-         return this.bundle.formatStringFromName(propertyName, params, params.length);
-       ]]>
-       </getter>
-     </property>
-
-     <method name="open">
-      <body>
-      <![CDATA[
-        let className, tooltip;
-        if (!this.hasAttribute("open")) {
-          let buddies = this.contact.getBuddies();
-          for (let buddy of buddies) {
-            let buddyElt = document.createElement("buddy");
-            this.appendChild(buddyElt);
-            buddyElt.build(buddy, this);
-          }
-          if (buddies.length == 1) {
-            let buddyElt = document.createElement("buddy");
-            buddyElt.setAttribute("dummy", "true");
-            this.appendChild(buddyElt);
-          }
-          this.setAttribute("open", "true");
-          [className, tooltip] = ["expander-up", "tooltiptextcollapse"];
-        }
-        else {
-          for (let i = this.childNodes.length - 1; i >= 0; --i)
-            this.childNodes[i].removeNode();
-          this.removeAttribute("open");
-          [className, tooltip] = ["expander-down", "tooltiptextexpand"];
-        }
-
-        let expander = document.getAnonymousElementByAttribute(this, "anonid",
-                                                               "expander");
-        expander.setAttribute("class", className);
-        expander.setAttribute("tooltiptext", expander.getAttribute(tooltip));
-      ]]>
-      </body>
-     </method>
-
-     <method name="keyPress">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        if (!this.hasAttribute("aliasing")) {
-          switch (aEvent.keyCode) {
-            case aEvent.DOM_VK_LEFT:
-              if (this.hasAttribute("open"))
-                this.open();
-              break;
-
-            case aEvent.DOM_VK_RIGHT:
-              if (!this.hasAttribute("open"))
-                this.open();
-              break;
-          }
-        }
-        this._keyPress(aEvent); // inherited actions.
-      ]]>
-      </body>
-     </method>
-    </implementation>
-    <handlers>
-     <handler event="click">
-       <![CDATA[
-         if (event.originalTarget.getAttribute("anonid") == "expander")
-           this.open();
-       ]]>
-     </handler>
-    </handlers>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/conv.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd" >
-  %instantbirdDTD;
-]>
-
-<bindings id="convBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl"
-          xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <binding id="conv" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content>
-      <xul:hbox flex="1" class="conv-hbox" mousethrough="always" align="center">
-        <xul:stack class="prplBuddyIcon" mousethrough="always">
-          <xul:image class="protoIcon" xbl:inherits="src=iconPrpl,status"/>
-          <xul:image class="statusIcon" xbl:inherits="status"/>
-        </xul:stack>
-        <xul:label crop="end" flex="1" mousethrough="always"
-                   anonid="displayname" class="convDisplayName blistDisplayName"
-                   xbl:inherits="value=displayname,status"/>
-        <xul:label crop="end" flex="1000000" mousethrough="always"
-                   anonid="statusText" class="convStatusText"
-                   xbl:inherits="value=statusTextWithDash"/>
-        <xul:label anonid="unreadTargetedCount" class="convUnreadTargetedCount"
-                   crop="end" mousethrough="never"
-                   xbl:inherits="value=unreadTargetedCount"/>
-        <xul:label anonid="unreadCount" class="convUnreadCount"
-                   crop="end" mousethrough="never"
-                   xbl:inherits="value=unreadCount"/>
-      </xul:hbox>
-    </content>
-    <implementation implements="nsIObserver">
-
-     <destructor>
-      <![CDATA[
-        if (this.conv) {
-          this.conv.removeObserver(this);
-          delete this.conv;
-        }
-      ]]>
-     </destructor>
-
-     <method name="build">
-      <parameter name="aConv"/>
-      <body>
-      <![CDATA[
-        this.conv = aConv;
-        this.parentNode.listedConvs[this.conv.id] = this;
-        this.conv.addObserver(this);
-        this.update();
-      ]]>
-      </body>
-     </method>
-
-     <property name="displayName"
-               onget="return this.conv.title;"/>
-
-     <!-- nsIObserver implementation -->
-     <method name="observe">
-       <parameter name="aSubject"/>
-       <parameter name="aTopic"/>
-       <parameter name="aData"/>
-       <body>
-       <![CDATA[
-         if (aTopic == "target-prpl-conversation-changed" ||
-             aTopic == "unread-message-count-changed" ||
-             aTopic == "update-conv-title" ||
-             aTopic == "update-buddy-status" ||
-             aTopic == "update-buddy-status" ||
-             aTopic == "update-conv-chatleft" ||
-             aTopic == "update-conv-chatjoining" ||
-             aTopic == "chat-update-topic")
-           this.update();
-         else if (aTopic == "ui-conversation-closed")
-           this.removeNode();
-       ]]>
-       </body>
-     </method>
-
-     <method name="update">
-      <body>
-      <![CDATA[
-        this.setAttribute("displayname", this.displayName);
-        this.setAttribute("unreadCount", this.conv.unreadIncomingMessageCount);
-
-        let pings = 0;
-        let statusText = "";
-        if (this.conv.isChat) {
-          pings = this.conv.unreadTargetedMessageCount
-          if (this.conv.joining)
-            this.setAttribute("status", "joining");
-          else if (!this.conv.account.connected || this.conv.left)
-            this.setAttribute("status", "left");
-          else {
-            this.removeAttribute("status");
-            statusText = this.conv.topic;
-          }
-        }
-        else {
-          let statusType = Ci.imIStatusInfo.STATUS_UNKNOWN;
-          let buddy = this.conv.buddy;
-          if (buddy && buddy.account.connected) {
-            statusText = buddy.statusText;
-            statusType = buddy.statusType;
-          }
-          this.setAttribute("status", Status.toAttribute(statusType));
-        }
-
-        this.setAttribute("unreadTargetedCount", pings);
-        if (statusText)
-          this.setAttribute("statusTextWithDash", " - " + statusText);
-        else
-          this.removeAttribute("statusTextWithDash");
-
-        this.setAttribute("iconPrpl",
-                          this.conv.account.protocol.iconBaseURI + "icon.png");
-      ]]>
-      </body>
-     </method>
-
-     <method name="removeNode">
-      <body>
-      <![CDATA[
-        this.conv.removeObserver(this);
-        delete this.parentNode.listedConvs[this.conv.id];
-        this.remove();
-        delete this.conv;
-      ]]>
-      </body>
-     </method>
-
-     <method name="openConversation">
-      <body>
-       <![CDATA[
-         if (!("Conversations" in window))
-           ChromeUtils.import("resource:///modules/imWindows.jsm");
-         Conversations.focusConversation(this.conv.target);
-       ]]>
-      </body>
-     </method>
-
-     <method name="closeConversation">
-      <body>
-       <![CDATA[
-         if (!("Conversations" in window))
-           ChromeUtils.import("resource:///modules/imWindows.jsm");
-         Conversations.forgetHiddenConversation(this.conv);
-         this.conv.close();
-       ]]>
-      </body>
-     </method>
-
-     <method name="keyPress">
-      <parameter name="aEvent"/>
-      <body>this._keyPress(aEvent);</body>
-     </method>
-     <method name="_keyPress">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        switch (aEvent.keyCode) {
-          // If Enter or Return is pressed, open a new conversation
-          case aEvent.DOM_VK_RETURN:
-            this.openConversation();
-            break;
-        }
-      ]]>
-      </body>
-     </method>
-    </implementation>
-    <handlers>
-     <handler event="mousedown">
-       <![CDATA[
-         let anonid = event.originalTarget.getAttribute("anonid");
-         if (anonid == "unreadCount" || anonid == "unreadTargetedCount") {
-           openConversation();
-           event.preventDefault();
-         }
-       ]]>
-     </handler>
-
-     <handler event="click">
-       <![CDATA[
-         if (event.detail == 2)
-           openConversation();
-       ]]>
-     </handler>
-    </handlers>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/convZoom.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// This code was mostly copied from mozilla:
-// mozilla-central/source/browser/base/content/browser-textZoom.js
-var FullZoom = {
-  prefName: "conversation.zoomLevel",
-
-  init: function FullZoom_init() {
-    window.addEventListener("DOMMouseScroll", FullZoom.handleMouseScrolled);
-    window.addEventListener("unload", FullZoom.destroy);
-    let conversations = document.getElementById("conversations");
-    if (conversations) {
-      conversations.tabContainer
-                   .addEventListener("select", FullZoom.applyPrefValue);
-    }
-
-    Services.prefs.addObserver(FullZoom.prefName, FullZoom);
-    FullZoom.applyPrefValue();
-  },
-
-  destroy: function FullZoom_destroy() {
-    Services.prefs.removeObserver(FullZoom.prefName, FullZoom);
-    window.removeEventListener("DOMMouseScroll", FullZoom.handleMouseScrolled);
-  },
-
-  // Events Handlers / Observe
-  handleMouseScrolled: function FullZoom_handleMouseScrolled(event) {
-    if (!event.ctrlKey || event.altKey || event.shiftKey || !event.detail)
-      return;
-
-    if (event.detail < 0 )
-      ZoomManager.enlarge();
-    else
-      ZoomManager.reduce();
-
-    FullZoom.saveCurrentZoomToPref();
-  },
-
-  // nsIObserver
-  observe: function (aSubject, aTopic, aData) {
-    if (aTopic != "nsPref:changed")
-      return;
-
-    switch(aData) {
-      case this.prefName:
-        this.applyPrefValue();
-        break;
-    }
-  },
-
-  enlarge: function FullZoom_zoomEnlarge() {
-    ZoomManager.enlarge();
-    this.saveCurrentZoomToPref();
-  },
-  reduce: function FullZoom_zoomReduce() {
-    ZoomManager.reduce();
-    this.saveCurrentZoomToPref();
-  },
-  reset: function FullZoom_ZoomReset() {
-    ZoomManager.reset();
-    try {
-      // Can throw an exception when the preference does not exist or is
-      // already at its default value.
-      Services.prefs.clearUserPref(this.prefName);
-    }
-    catch (ex) {}
-  },
-
-  // Settings and Prefs
-  saveCurrentZoomToPref: function FullZoom_saveCurrentZoomToPref() {
-    Services.prefs.setCharPref(this.prefName, ZoomManager.zoom);
-  },
-  /**
-   * Set the zoom level for the current browser.
-   *
-   * Per nsPresContext::setFullZoom, we can set the zoom to its current value
-   * without significant impact on performance, as the setting is only applied
-   * if it differs from the current setting.  In fact getting the zoom and then
-   * checking ourselves if it differs costs more.
-   **/
-  applyPrefValue: function FullZoom_applyPrefValue() {
-    // If there's no browser (non-conversation tabs), don't do anything.
-    if (!getBrowser())
-      return;
-    let value = parseFloat(Services.prefs.getCharPref(FullZoom.prefName));
-    if (isNaN(value))
-      value = 1;
-    else if (value < ZoomManager.MIN)
-      value = ZoomManager.MIN;
-    else if (value > ZoomManager.MAX)
-      value = ZoomManager.MAX;
-    ZoomManager.zoom = value;
-  }
-};
-
-this.addEventListener("load", FullZoom.init);
deleted file mode 100644
--- a/im/content/conversation.xml
+++ /dev/null
@@ -1,2332 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-<!DOCTYPE bindings [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-]>
-
-<bindings id="conversationBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="conversation">
-    <resources>
-      <stylesheet src="chrome://instantbird/skin/conversation.css"/>
-    </resources>
-    <content>
-      <xul:vbox class="convBox" flex="1">
-        <xul:toolbar class="conv-top-info" anonid="conv-top-info" context="tabContextMenu"/>
-        <xul:hbox class="conv-top" flex="1" anonid="conv-top">
-          <xul:notificationbox class="conv-messages" anonid="convNotificationBox" flex="1" xbl:inherits="chat">
-            <xul:vbox flex="1">
-              <xul:browser anonid="browser" type="content"
-                           browser-type="conversation" flex="1"
-                           xbl:inherits="tooltip=contenttooltip,contextmenu=contentcontextmenu,autoscrollpopup"/>
-              <xul:progressmeter anonid="browserProgress" hidden="true"/>
-              <xul:findbar anonid="FindToolbar" reversed="true"/>
-            </xul:vbox>
-          </xul:notificationbox>
-          <xul:splitter anonid="splitter" collapse="after" class="splitter conv-chat" xbl:inherits="chat">
-            <xul:grippy/>
-          </xul:splitter>
-          <xul:vbox class="conv-chat" width="150" xbl:inherits="chat">
-            <xul:hbox align="baseline" class="conv-nicklist-header">
-              <xul:label class="conv-nicklist-header-label"
-                         anonid="participantLabel"
-                         value="&chat.participants;"/>
-              <xul:textbox flex="1" readonly="true" class="plain" anonid="participantCount"/>
-            </xul:hbox>
-            <xul:listbox anonid="nicklist" class="conv-nicklist"
-                         flex="1" seltype="multiple"
-                         xbl:inherits="contextmenu=contentcontextmenu"
-                         tooltip="imTooltip"
-                         onclick="onNickClick(event);"
-                         onkeypress="onNicklistKeyPress(event);"/>
-          </xul:vbox>
-        </xul:hbox>
-        <hbox anonid="convStatusContainer" class="conv-status-container" hidden="true">
-          <xul:description anonid="convStatus" class="conv-status" crop="end" />
-        </hbox>
-        <xul:splitter class="splitter splitter-bottom" anonid="splitter-bottom"/>
-        <xul:stack anonid="conv-bottom" class="conv-bottom">
-          <xul:textbox anonid="inputBox" class="conv-textbox" multiline="true" flex="1"/>
-          <xul:description anonid="charCounter" class="conv-counter" value=""
-                           right="0" bottom="0"/>
-        </xul:stack>
-      </xul:vbox>
-    </content>
-
-    <implementation implements="nsIObserver">
-      <constructor>
-        <![CDATA[
-          let textbox = this.editor;
-          textbox.addEventListener("keypress", this.inputKeyPress.bind(this));
-          textbox.addEventListener("input", this.inputValueChanged.bind(this));
-          textbox.addEventListener("overflow", this.inputExpand.bind(this), true);
-          textbox.addEventListener("underflow", this._onTextboxUnderflow, true);
-
-          new MutationObserver(function(aMutations) {
-            for (let mutation of aMutations) {
-              if (mutation.oldValue == "dragging") {
-                this._onSplitterChange();
-                break;
-              }
-            }
-          }.bind(this)).observe(this.getElt("splitter-bottom"),
-                                {attributes: true, attributeOldValue: true,
-                                 attributeFilter: ["state"]});
-
-          new MutationObserver(function(aMutations) {
-            for (let mutation of aMutations) {
-              if (mutation.oldValue == "collapsed") {
-                this._onNicklistSplitterChange();
-                break;
-              }
-            }
-          }.bind(this)).observe(this.getElt("splitter"),
-                                {attributes: true, attributeOldValue: true,
-                                 attributeFilter: ["state"]});
-
-          var browser = this.browser;
-          browser.addEventListener("keypress", this.browserKeyPress);
-          browser.addEventListener("dblclick", this.browserDblClick.bind(this));
-          Services.obs.addObserver(this, "conversation-loaded");
-        ]]>
-      </constructor>
-
-      <destructor>
-        <![CDATA[
-          this.destroy();
-        ]]>
-      </destructor>
-
-      <!-- This is necessary because the destructor doesn't always get
-           called when we are removed from a tabbox.  This needs to be
-           explicitly called before removing the DOM node. -->
-      <method name="destroy">
-        <body>
-        <![CDATA[
-          window.XULBrowserWindow.hideOverLinkImmediately = true;
-          window.XULBrowserWindow.setOverLink("", null);
-          delete window.XULBrowserWindow.hideOverLinkImmediately;
-
-          if ("buddies" in this) {
-            this.buddies.forEach(chatBuddy => {
-              if (chatBuddy.activeTimer)
-                clearTimeout(chatBuddy.activeTimer);
-            });
-          }
-          this._forgetConv();
-
-          if ("MessageFormat" in window) {
-            let textbox = this.editor;
-            MessageFormat.unregisterTextbox(textbox);
-            TextboxSpellChecker.unregisterTextbox(textbox);
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="_forgetConv">
-        <parameter name="aShouldClose"/>
-        <body>
-        <![CDATA[
-          if (!this._conv)
-            return;
-          this._conv.removeObserver(this);
-          Conversations.unregisterConversation(this, aShouldClose);
-          delete this._conv;
-          this.browser.destroy();
-          this.findbar.destroy();
-        ]]>
-        </body>
-      </method>
-
-      <method name="close">
-        <body>
-        <![CDATA[
-          this._forgetConv(true);
-        ]]>
-       </body>
-      </method>
-
-      <method name="hide">
-        <body>
-        <![CDATA[
-          this._forgetConv(false);
-        ]]>
-        </body>
-      </method>
-
-      <method name="finishImport">
-        <parameter name="aConversation"/>
-        <body>
-        <![CDATA[
-          // Swap the docshells.
-          this.browser.swapDocShells(aConversation.browser);
-          // Ensure observers are removed.
-          aConversation.conv = null;
-          this.editor.value = aConversation.editor.value;
-          this.browser.browserResize();
-          this.updateTyping();
-          this.inputValueChanged();
-          this.loaded = true;
-          // Tell observers that this conversation was imported from another
-          // window as they might want to behave differently in this case.
-          Services.obs.notifyObservers(this.browser, "conversation-loaded",
-                                                     "imported");
-        ]]>
-        </body>
-      </method>
-
-      <field name="loaded">false</field>
-
-      <field name="_readCount">0</field>
-      <method name="_showFirstMessages">
-        <body>
-        <![CDATA[
-          this.loaded = true;
-          let messages = this._conv.getMessages();
-          this._readCount = messages.length - this._conv.unreadMessageCount;
-          if (this._readCount)
-            this._writingContextMessages = true;
-          messages.forEach(this.addMsg.bind(this));
-          delete this._writingContextMessages;
-        ]]>
-        </body>
-      </method>
-
-      <method name="addMsg">
-        <parameter name="aMsg"/>
-        <body>
-        <![CDATA[
-          if (!this.loaded)
-            throw "Calling addMsg before the browser is ready?";
-
-          var conv = aMsg.conversation;
-          if (!conv) {
-            // The conversation has already been destroyed,
-            // probably because the window was closed.
-            // Return without doing anything.
-            return;
-          }
-
-          if (!aMsg.system && conv.isChat) {
-            let name = aMsg.who;
-            aMsg.color = this.buddies.has(name) ?
-                         this._activateBuddy(this.buddies.get(name), aMsg.time) :
-                         this._getColorStyle(this._computeColor(name));
-          }
-
-          let read = this._readCount > 0;
-          let isUnreadMessage = !read && aMsg.incoming && !aMsg.system;
-          let isTabFocused = this.tab && this.tab.selected && document.hasFocus();
-          let shouldSetUnreadFlag = this.tab && isUnreadMessage && !isTabFocused;
-          let firstUnread = this.tab && !this.tab.hasAttribute("unread") &&
-                            isUnreadMessage && this._isAfterFirstRealMessage &&
-                            (!isTabFocused || this._writingContextMessages);
-
-          // Since the unread flag won't be set if the tab is focused,
-          // we need the following when showing the first messages to stop
-          // firstUnread being set for subsequent messages.
-          if (firstUnread)
-            delete this._writingContextMessages;
-
-          this.browser.appendMessage(aMsg, read, firstUnread);
-          if (!aMsg.system)
-            this._isAfterFirstRealMessage = true;
-
-          if (read) {
-            --this._readCount;
-            if (!this._readCount && !this._isAfterFirstRealMessage) {
-              // If all the context messages were system messages, we don't want
-              // an unread ruler after the context messages, so we forget that
-              // we had context messages.
-              delete this._writingContextMessages;
-            }
-            return;
-          }
-
-          if (isUnreadMessage && (!aMsg.conversation.isChat || aMsg.containsNick)) {
-            this._lastPing = aMsg.who;
-            this._lastPingTime = aMsg.time;
-            if (Services.prefs.getBoolPref("messenger.options.getAttentionOnNewMessages") &&
-                Interruptions.requestInterrupt("new-text", aMsg, "get-attention"))
-              window.getAttention();
-          }
-
-          if (isTabFocused)
-            this._conv.markAsRead();
-
-          if (shouldSetUnreadFlag) {
-            if (conv.isChat && aMsg.containsNick)
-              this.tab.setAttribute("attention", "true");
-            this.tab.setAttribute("unread", "true");
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="sendMsg">
-        <parameter name="aMsg"/>
-        <body>
-        <![CDATA[
-          if (!aMsg)
-            return;
-
-          let account = this._conv.account;
-
-          if (aMsg[0] == "/") {
-            let convToFocus = {};
-
-            // The /say command is used to bypass command processing
-            // (/say can be shortened to just /).
-            // "/say" or "/say " should be ignored, as should "/" and "/ ".
-            if (aMsg.match(/^\/(?:say)? ?$/)) {
-              this.resetInput();
-              return;
-            }
-            else if (aMsg.match(/^\/(?:say)? .*/))
-              aMsg = aMsg.slice(aMsg.indexOf(" ") + 1);
-            else if (Services.cmd.executeCommand(aMsg, this._conv.target,
-                                                 convToFocus)) {
-              this._conv.sendTyping("");
-              this.resetInput();
-              if (convToFocus.value)
-                Conversations.focusConversation(convToFocus.value);
-              return;
-            }
-            else if (account.protocol.slashCommandsNative && account.connected) {
-              let cmd = aMsg.match(/^\/[^ ]+/);
-              if (cmd && cmd != "/me") {
-                this._conv.systemMessage(
-                  this.bundle.formatStringFromName("unknownCommand", [cmd], 1),
-                  true);
-                return;
-              }
-            }
-          }
-
-          if (!account.connected) {
-            let errMsg;
-            if (Services.io.offline)
-              errMsg = this.bundle.GetStringFromName("networkOffline");
-            else if (account.statusInfo.statusType ==
-                     Ci.imIStatusInfo.STATUS_OFFLINE)
-              errMsg = this.bundle.GetStringFromName("statusOffline");
-            else {
-              errMsg = this.bundle.formatStringFromName("accountDisconnected",
-                         [account.protocol.name, account.name], 2);
-            }
-            this._conv.systemMessage(errMsg, true);
-            return;
-          }
-
-          let msg = Cc["@mozilla.org/txttohtmlconv;1"]
-                      .getService(Ci.mozITXTToHTMLConv)
-                      .scanTXT(aMsg, 0);
-
-          if (account.HTMLEnabled) {
-            msg = msg.replace(/\n/g, "<br/>");
-            if (Services.prefs.getBoolPref("messenger.conversations.sendFormat")) {
-              let style = MessageFormat.getMessageStyle();
-              let proto = this._conv.account.protocol.id;
-              if (proto == "prpl-msn") {
-                if ("color" in style)
-                  msg = "<font color=\"" + style.color + "\">" + msg + "</font>";
-                if ("fontFamily" in style)
-                  msg = "<font face=\"" + style.fontFamily + "\">" + msg + "</font>";
-                // MSN doesn't support font size info in messages...
-              }
-              else if (proto == "prpl-aim" || proto == "prpl-icq") {
-                let styleAttributes = ""
-                if ("color" in style)
-                  styleAttributes += " color=\"" + style.color + "\"";
-                if ("fontFamily" in style)
-                  styleAttributes += " face=\"" + style.fontFamily + "\"";
-                if ("fontSize" in style) {
-                  let size = style.fontSize - style.defaultFontSize;
-                  if (size < -4)
-                    size = 1;
-                  else if (size < 0)
-                    size = 2;
-                  else if (size < 3)
-                    size = 3
-                  else if (size < 7)
-                    size = 4;
-                  else if (size < 15)
-                    size = 5;
-                  else if (size < 25)
-                    size = 6;
-                  else
-                    size = 7;
-                  styleAttributes += " size=\"" + size + "\""
-                                   + " style=\"font-size: " + style.fontSize + "px;\"";
-                }
-                if (styleAttributes)
-                  msg = "<font" + styleAttributes + ">" + msg + "</font>";
-              }
-              else {
-                let styleProperties = [];
-                if ("color" in style)
-                  styleProperties.push("color: " + style.color);
-                if ("fontFamily" in style)
-                  styleProperties.push("font-family: " + style.fontFamily);
-                if ("fontSize" in style)
-                  styleProperties.push("font-size: " + style.fontSize + "px");
-                style = styleProperties.join("; ");
-                if (style)
-                  msg = "<span style=\"" + style + "\">" + msg + "</span>";
-              }
-            }
-            this._conv.sendMsg(msg);
-          }
-          else
-            this._conv.sendMsg(account.HTMLEscapePlainText ? msg : aMsg);
-
-          // reset the textbox to its original size
-          this.resetInput();
-        ]]>
-        </body>
-      </method>
-
-      <method name="_onSplitterChange">
-        <body>
-        <![CDATA[
-          let textbox = this.editor;
-          // set the default height as the deck height (modified by the splitter)
-          textbox.defaultHeight = parseInt(textbox.parentNode.height) -
-            this._TEXTBOX_VERTICAL_OVERHEAD;
-
-          // When moved, the splitter takes the child frames (rather
-          // than DOM nodes) of the resized area, and for each, it sets the
-          // current (=after resize) frame height as the height attribute
-          // of the associated content (DOM) node.
-          // This height attribute is clearly undesirable here.
-          this.getElt("conv-top-info").removeAttribute("height");
-        ]]>
-        </body>
-      </method>
-
-      <method name="_onNicklistSplitterChange">
-        <body>
-        <![CDATA[
-          // Workaround for bug 1143: Listitems which are added while the
-          // nicklist is collapsed may not get bound when the nicklist is
-          // reopened, if they were assumed to be visible based on
-          // their position in the nicklist. They then remain missing from the
-          // nicklist, as the DOM believes they were already initialized.
-          // To ensure they get bound, we hide and then redisplay
-          // the listbox.
-          let pos = this.nicklistElt.getIndexOfFirstVisibleRow();
-          this.nicklistElt.style.display = "none";
-          // Force layout by reading a suitable property.
-          let dummy = this.nicklistElt.clientTop;
-          this.nicklistElt.style.display = "";
-          // Restore scroll position.
-          this.nicklistElt.scrollToIndex(pos);
-        ]]>
-        </body>
-      </method>
-
-      <!-- This value represents the difference between the deck's height and
-           the textbox's content height (borders, margins, paddings).
-           Differ according to the Operating System native theme. -->
-      <field name="_TEXTBOX_VERTICAL_OVERHEAD">0</field>
-      <!-- Ratio textbox height / conversation height.
-           0.1 means that the textbox's height is 10% of the conversation's
-           height. -->
-      <field name="_TEXTBOX_RATIO" readonly="true">0.1</field>
-
-
-      <method name="calculateTextboxDefaultHeight">
-        <body>
-        <![CDATA[
-          let totalSpace = parseInt(window.getComputedStyle(this, null)
-                                          .getPropertyValue("height"));
-          let textbox = this.editor;
-          let textboxStyle = window.getComputedStyle(textbox, null);
-          let lineHeight = parseInt(textboxStyle.getPropertyValue("line-height"));
-
-          // Compute the overhead size.
-          let textboxHeight = textbox.inputField.clientHeight;
-          let deckHeight = textbox.parentNode.boxObject.height;
-          this._TEXTBOX_VERTICAL_OVERHEAD = deckHeight - textboxHeight;
-
-          // Calculate the number of lines to display.
-          let numberOfLines =
-            Math.round(totalSpace * this._TEXTBOX_RATIO / lineHeight);
-          if (numberOfLines <= 0)
-            numberOfLines = 1;
-
-          if (!this._maxEmptyLines) {
-            this._maxEmptyLines =
-              Services.prefs.getIntPref("messenger.conversations.textbox.defaultMaxLines");
-          }
-
-          if (numberOfLines > this._maxEmptyLines)
-            numberOfLines = this._maxEmptyLines;
-          textbox.defaultHeight = numberOfLines * lineHeight;
-
-          // set minimum height (in case the user moves the splitter)
-          textbox.parentNode.minHeight =
-            lineHeight + this._TEXTBOX_VERTICAL_OVERHEAD;
-        ]]>
-        </body>
-      </method>
-
-      <method name="initTextboxFormat">
-        <body>
-        <![CDATA[
-          let textbox = this.editor;
-
-          if (!("MessageFormat" in window))
-            ChromeUtils.import("resource:///modules/imTextboxUtils.jsm");
-          MessageFormat.registerTextbox(textbox);
-
-          // Init the textbox size
-          this.calculateTextboxDefaultHeight();
-          textbox.parentNode.height = textbox.defaultHeight +
-                                      this._TEXTBOX_VERTICAL_OVERHEAD;
-          textbox.inputField.style.overflowY = "hidden";
-
-          // Delay the initialization of the spellchecker until after
-          // the checkbox is initialized, otherwise the spellchecker is
-          // broken in conversations added to the window before it is
-          // visible (bug 295).
-          TextboxSpellChecker.registerTextbox(textbox);
-        ]]>
-        </body>
-      </method>
-
-      <method name="inputKeyPress">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          var inputBox = this.editor;
-          let text = inputBox.value;
-
-          const navKeyCodes = [KeyEvent.DOM_VK_PAGE_UP, KeyEvent.DOM_VK_PAGE_DOWN,
-                               KeyEvent.DOM_VK_HOME, KeyEvent.DOM_VK_END,
-                               KeyEvent.DOM_VK_UP, KeyEvent.DOM_VK_DOWN];
-
-          // Pass navigation keys to the browser if
-          // 1) the textbox is empty or 2) it's an IB-specific key combination
-          if (!text && navKeyCodes.includes(event.keyCode) ||
-              ((event.shiftKey || event.altKey) && (event.keyCode == KeyEvent.DOM_VK_PAGE_UP ||
-                                                    event.keyCode == KeyEvent.DOM_VK_PAGE_DOWN))) {
-            let newEvent = document.createEvent("KeyboardEvent");
-            newEvent.initKeyEvent("keypress", event.bubbles, event.cancelable, null,
-                                  event.ctrlKey, event.altKey, event.shiftKey, event.metaKey,
-                                  event.keyCode, event.charCode);
-            event.preventDefault();
-            event.stopPropagation();
-            // Keyboard events must be sent to the focused element for bubbling to work.
-            this.browser.focus();
-            this.browser.dispatchEvent(newEvent);
-            inputBox.focus();
-            return;
-          }
-
-          // When attempting to copy an empty selection, copy the
-          // browser selection instead (see bug 693).
-          // The 'C' won't be lowercase if caps lock is enabled.
-          if ((event.charCode == 99 /* 'c' */ ||
-               (event.charCode == 67 /* 'C' */ && !event.shiftKey)) &&
-              (navigator.platform.includes("Mac") ? event.metaKey : event.ctrlKey) &&
-              inputBox.selectionStart == inputBox.selectionEnd) {
-            this.browser.doCommand();
-            return;
-          }
-
-          // We don't want to enable tab completion if the user has selected
-          // some text, as it's not clear what the user would expect
-          // to happen in that case.
-          let noSelection = !(inputBox.selectionEnd - inputBox.selectionStart);
-
-          // Undo tab complete.
-          if (noSelection && this._completions &&
-              event.keyCode == KeyEvent.DOM_VK_BACK_SPACE &&
-              !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
-            if (text == this._beforeTabComplete) {
-              // Nothing to undo, so let backspace act normally.
-              delete this._completions;
-            }
-            else {
-              event.preventDefault();
-
-              // First undo the comma separating multiple nicks or the suffix.
-              // More than one nick:
-              //   "nick1, nick2: " -> "nick1: nick2"
-              // Single nick: remove the suffix
-              //   "nick1: " -> "nick1"
-              let pos = inputBox.selectionStart;
-              const suffix = ": ";
-              if (pos > suffix.length &&
-                  text.substring(pos - suffix.length, pos) == suffix) {
-                let completions = Array.from(this.buddies.keys());
-                // Check if the preceding words are a sequence of nick completions.
-                let preceding = text.substring(0, pos - suffix.length).split(", ");
-                if (preceding.every(n => completions.includes(n))) {
-                  let s = preceding.pop();
-                  if (preceding.length)
-                    s = suffix + s;
-                  inputBox.selectionStart -= s.length + suffix.length;
-                  this.addString(s);
-                  if (this._completions[0].slice(-suffix.length) == suffix) {
-                    this._completions =
-                      this._completions.map(c => c.slice(0, -suffix.length));
-                  }
-                  if (this._completions.length == 1 &&
-                      inputBox.value == this._beforeTabComplete) {
-                    // Nothing left to undo or to cycle through.
-                    delete this._completions;
-                  }
-                  return;
-                }
-              }
-
-              // Full undo.
-              inputBox.selectionStart = 0;
-              this.addString(this._beforeTabComplete);
-              delete this._completions;
-              return;
-            }
-          }
-
-          // Tab complete.
-          // Keep the default behavior of the tab key if the input box
-          // is empty or a modifier is used.
-          if (event.keyCode == KeyEvent.DOM_VK_TAB &&
-              text.length != 0 && noSelection &&
-              !event.altKey && !event.ctrlKey && !event.metaKey &&
-              (!event.shiftKey || this._completions)) {
-            event.preventDefault();
-
-            if (this._completions) {
-              // Tab has been pressed more than once.
-              if (this._completions.length == 1)
-                return;
-              if (this._shouldListCompletionsLater) {
-                this._conv.systemMessage(this._shouldListCompletionsLater);
-                delete this._shouldListCompletionsLater;
-              }
-
-              inputBox.selectionStart = this._completionsStart;
-              if (event.shiftKey) {
-                // Reverse cycle completions.
-                this._completionsIndex -= 2;
-                if (this._completionsIndex < 0)
-                  this._completionsIndex += this._completions.length;
-              }
-              this.addString(this._completions[this._completionsIndex++]);
-              this._completionsIndex %= this._completions.length;
-              return;
-            }
-
-            let completions = [];
-            let firstWordSuffix = " ";
-            let secondNick = false;
-
-            // Second regex result will contain word without leading special characters.
-            this._beforeTabComplete = text.substring(0, inputBox.selectionStart);
-            let words = this._beforeTabComplete.match(/\S*?([\w-]+)?$/);
-            let word = words[0];
-            if (!word)
-              return;
-            let isFirstWord = inputBox.selectionStart == word.length;
-
-            // Check if we are completing a command.
-            let completingCommand = isFirstWord && word[0] == "/";
-            if (completingCommand) {
-              for (let cmd of Services.cmd.listCommandsForConversation(this._conv)) {
-                // It's possible to have a global and a protocol specific command
-                // with the same name. Avoid duplicates in the |completions| array.
-                let name = "/" + cmd.name;
-                if (!completions.includes(name))
-                  completions.push(name);
-              }
-            }
-            else {
-              // If it's not a command, the only thing we can complete is a nick.
-              if (!this._conv.isChat)
-                return;
-
-              firstWordSuffix = ": ";
-
-              completions = Array.from(this.buddies.keys());
-
-              // Add recently parted nicks.
-              const kIncludeNickTimespan = 300000;
-              let cutoffTime = Date.now() - kIncludeNickTimespan;
-              let partedNicks = Object.keys(this.partedBuddies);
-              let j = partedNicks.length - 1;
-              while (j >= 0 &&
-                     this.partedBuddies[partedNicks[j]].partTime > cutoffTime)
-                --j;
-              ++j; // Index of the first nick we want to keep.
-              if (partedNicks.length > j)
-                completions = completions.concat(partedNicks.slice(j));
-
-              let outgoingNick = this._conv.nick;
-              completions = completions.filter(c => c != outgoingNick);
-
-              // Check if the preceding words are a sequence of nick completions.
-              let wordStart = inputBox.selectionStart - word.length;
-              if (wordStart > 2) {
-                let separator = text.substring(wordStart - 2, wordStart);
-                if (separator == ": " || separator == ", ") {
-                  let preceding = text.substring(0, wordStart - 2).split(", ");
-                  if (preceding.every(n => completions.includes(n))) {
-                    secondNick = true;
-                    isFirstWord = true;
-                    // Remove preceding completions from possible completions.
-                    completions = completions.filter(c =>
-                      !preceding.includes(c));
-                  }
-                }
-              }
-            }
-
-            // Keep only the completions that share |word| as a prefix.
-            // Be case insensitive only if |word| is entirely lower case.
-            let condition;
-            if (word.toLocaleLowerCase() == word)
-              condition = c => c.toLocaleLowerCase().startsWith(word);
-            else
-              condition = c => c.startsWith(word);
-            let matchingCompletions = completions.filter(condition);
-            if (!matchingCompletions.length && words[1]) {
-              word = words[1];
-              firstWordSuffix = " ";
-              matchingCompletions = completions.filter(condition);
-            }
-            if (!matchingCompletions.length)
-              return;
-
-            // If the cursor is in the middle of a word, and the word is a nick,
-            // there is no need to complete - just jump to the end of the nick.
-            let wholeWord = text.substring(inputBox.selectionStart - word.length);
-            for (let completion of matchingCompletions) {
-              if (wholeWord.lastIndexOf(completion, 0) == 0) {
-                let moveCursor = completion.length - word.length;
-                inputBox.selectionStart += moveCursor;
-                let separator = text.substring(inputBox.selectionStart,
-                                               inputBox.selectionStart + 2);
-                if (separator == ": " || separator == ", ")
-                  inputBox.selectionStart += 2;
-                else if (!moveCursor) {
-                  // If we're already at the end of a nick, carry on to display
-                  // a list of possible alternatives and/or apply punctuation.
-                  break;
-                }
-                return;
-              }
-            }
-
-            // We have possible completions!
-            this._completions = matchingCompletions.sort();
-            this._completionsIndex = 0;
-            // Save now the first and last completions in alphabetical order,
-            // as we will need them to find a common prefix. However they may
-            // not be the first and last completions in the list of completions
-            // actually exposed to the user, as if there are active nicks
-            // they will be moved to the beginning of the list.
-            let firstCompletion = this._completions[0];
-            let lastCompletion = this._completions.slice(-1)[0];
-
-            let preferredNick = false;
-            if (this._conv.isChat && !completingCommand) {
-              // If there are active nicks, prefer those.
-              let activeCompletions = this._completions.filter(c =>
-                this.buddies.has(c) &&
-                !this.buddies.get(c).hasAttribute("inactive"));
-              if (activeCompletions.length == 1)
-                preferredNick = true;
-              if (activeCompletions.length) {
-                // Move active nicks to the front of the queue.
-                activeCompletions.reverse();
-                activeCompletions.forEach(function(c) {
-                  this._completions.splice(this._completions.indexOf(c), 1);
-                  this._completions.unshift(c);
-                }, this);
-              }
-
-              // If one of the completions is the sender of the last ping,
-              // take it, if it was less than an hour ago.
-              if (this._lastPing && this.buddies.has(this._lastPing) &&
-                  this._completions.includes(this._lastPing) &&
-                  (Date.now() / 1000 - this._lastPingTime) < 3600) {
-                preferredNick = true;
-                this._completionsIndex = this._completions.indexOf(this._lastPing);
-              }
-            }
-
-            // Display the possible completions in a system message.
-            delete this._shouldListCompletionsLater;
-            if (this._completions.length > 1) {
-              let completionsList = this._completions.join(" ");
-              if (preferredNick) {
-                // If we have a preferred nick (which is completed as a whole
-                // even if there are alternatives), only show the list of
-                // completions on the next <tab> press.
-                this._shouldListCompletionsLater = completionsList;
-              }
-              else
-                this._conv.systemMessage(completionsList);
-            }
-
-            let suffix = (isFirstWord ? firstWordSuffix : "");
-            this._completions = this._completions.map(c => c + suffix);
-
-            let completion;
-            if (this._completions.length == 1 || preferredNick) {
-              // Only one possible completion? Apply it! :-)
-              completion = this._completions[this._completionsIndex++];
-              this._completionsIndex %= this._completions.length;
-            }
-            else {
-              // We have several possible completions, attempt to find a common prefix.
-              let maxLength = Math.min(firstCompletion.length, lastCompletion.length);
-              let i = 0;
-              while (i < maxLength && firstCompletion[i] == lastCompletion[i])
-                ++i;
-
-              if (i)
-                completion = firstCompletion.substring(0, i);
-              else {
-                // Include this case so that secondNick is applied anyway,
-                // in case a completion is added by another tab press.
-                completion = word;
-              }
-            }
-
-            // Always replace what the user typed as its upper/lowercase may
-            // not be correct.
-            inputBox.selectionStart -= word.length;
-            this._completionsStart = inputBox.selectionStart;
-
-            if (secondNick) {
-              // Replace the trailing colon with a comma before the completed nick.
-              inputBox.selectionStart -= 2;
-              completion = ", " + completion;
-            }
-
-            this.addString(completion);
-          }
-          else if (this._completions)
-            delete this._completions;
-
-          if (event.keyCode != 13)
-            return;
-
-          if (!event.ctrlKey && !event.shiftKey && !event.altKey) {
-            // Prevent the default action before calling sendMsg to avoid having
-            // a line break inserted in the textbox if sendMsg throws.
-            event.preventDefault();
-            this.sendMsg(text);
-          }
-          else if (!event.shiftKey)
-            this.addString("\n");
-        ]]>
-        </body>
-      </method>
-
-      <field name="_pendingValueChangedCall">false</field>
-      <method name="inputValueChanged">
-        <body>
-        <![CDATA[
-          // Delaying typing notifications will avoid sending several updates in
-          // a row if the user is on a slow or overloaded machine that has
-          // trouble to handle keystrokes in a timely fashion.
-          // Make sure only one typing notification call can be pending.
-          if (this._pendingValueChangedCall)
-            return;
-
-          this._pendingValueChangedCall = true;
-          Services.tm.mainThread.dispatch(this.delayedInputValueChanged.bind(this),
-                                          Ci.nsIEventTarget.DISPATCH_NORMAL);
-        ]]>
-        </body>
-      </method>
-
-      <method name="delayedInputValueChanged">
-        <body>
-        <![CDATA[
-          this._pendingValueChangedCall = false;
-
-          // By the time this function is executed, the conversation may have
-          // been closed.
-          if (!this._conv)
-            return;
-
-          let inputBox = this.editor;
-          let text = inputBox.value;
-
-          // Try to avoid sending typing notifications when the user is
-          // typing a command in the conversation.
-          // These checks are not perfect (especially if non-existing
-          // commands are sent as regular messages on the in-use prpl).
-          let left = Ci.prplIConversation.NO_TYPING_LIMIT;
-          if (!text.startsWith("/"))
-            left = this._conv.sendTyping(text);
-          else if (/^\/me /.test(text))
-            left = this._conv.sendTyping(text.slice(4));
-
-          // When the input box is cleared or there is no character limit,
-          // don't show the character limit.
-          let charCounter = this.getElt("charCounter");
-          if (left == Ci.prplIConversation.NO_TYPING_LIMIT || !text.length) {
-            charCounter.setAttribute("value", "");
-            inputBox.removeAttribute("invalidInput");
-          }
-          else {
-            // 200 is a 'magic' constant to avoid showing big numbers.
-            charCounter.setAttribute("value", (left < 200 ? left : ""));
-
-            if (left >= 0)
-              inputBox.removeAttribute("invalidInput");
-            else if (left < 0)
-              inputBox.setAttribute("invalidInput", "true");
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="resetInput">
-        <body>
-        <![CDATA[
-          var inputBox = this.editor;
-          inputBox.value = "";
-          this.getElt("charCounter").setAttribute("value", "");
-          inputBox.removeAttribute("invalidInput");
-
-          this._statusText = "";
-          this.displayStatusText();
-          this.updateTyping();
-
-          let overflow = "";
-          if (TextboxSize.autoResize) {
-            let currHeight = parseInt(inputBox.parentNode.height);
-            if (inputBox.defaultHeight + this._TEXTBOX_VERTICAL_OVERHEAD > currHeight)
-              inputBox.defaultHeight = currHeight - this._TEXTBOX_VERTICAL_OVERHEAD;
-            this.getElt("conv-bottom").height =
-              inputBox.defaultHeight + this._TEXTBOX_VERTICAL_OVERHEAD;
-            overflow = "hidden";
-          }
-
-          inputBox.inputField.style.overflowY = overflow;
-        ]]>
-        </body>
-      </method>
-
-      <method name="inputExpand">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          let textbox = this.editor;
-          let input = textbox.inputField;
-
-          // This feature has been disabled, or the user is currently dragging
-          // the splitter and the textbox has received an overflow event
-          if (!TextboxSize.autoResize ||
-              this.getElt("splitter-bottom").getAttribute("state") == "dragging") {
-            input.style.overflowY = "";
-            return;
-          }
-
-          // Check whether we can increase the height without hidding the status bar
-          // (ensure the min-height property on the top part of this dialog)
-          let topBox = this.getElt("conv-top");
-          let topBoxStyle = window.getComputedStyle(topBox, null);
-          let topMinSize = parseInt(topBoxStyle.getPropertyValue("min-height"));
-          let topSize = parseInt(topBoxStyle.getPropertyValue("height"));
-          let deck = textbox.parentNode;
-          let oldDeckHeight = parseInt(deck.height);
-          let newDeckHeight =
-            parseInt(input.scrollHeight) + this._TEXTBOX_VERTICAL_OVERHEAD;
-
-          if (!topMinSize || topSize - topMinSize > newDeckHeight - oldDeckHeight) {
-            // Hide a possible vertical scrollbar.
-            input.style.overflowY = "hidden";
-            deck.height = newDeckHeight;
-          }
-          else {
-            input.style.overflowY = "";
-            // Set it to the maximum possible value.
-            deck.height = oldDeckHeight + (topSize - topMinSize);
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="onResize">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          let splitter = this.getElt("splitter-bottom");
-          let textbox = this.editor;
-
-          if (!splitter.hasAttribute("state")) {
-            this.calculateTextboxDefaultHeight();
-            textbox.parentNode.height = textbox.defaultHeight +
-                                        this._TEXTBOX_VERTICAL_OVERHEAD;
-          }
-          else {
-            // Used in case the browser is already on its min-height, resize the
-            // textbox to avoid hidding the status bar.
-            let convTop = this.getElt("conv-top");
-            let convTopStyle = window.getComputedStyle(convTop, null);
-            let convTopHeight = parseInt(convTopStyle.getPropertyValue("height"));
-            let convTopMinHeight =
-              parseInt(convTopStyle.getPropertyValue("min-height"));
-
-            if (convTopHeight == convTopMinHeight) {
-              textbox.parentNode.height = parseInt(textbox.parentNode.minHeight);
-              convTopHeight = parseInt(convTopStyle.getPropertyValue("height"));
-              textbox.parentNode.height = parseInt(textbox.parentNode.minHeight) +
-                                          (convTopHeight - convTopMinHeight);
-            }
-          }
-
-          if (TextboxSize.autoResize)
-            this.inputExpand();
-        ]]>
-        </body>
-      </method>
-
-      <method name="_onTextboxUnderflow">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          if (TextboxSize.autoResize)
-            this.inputField.style.overflowY = "hidden";
-        ]]>
-        </body>
-      </method>
-
-      <method name="browserKeyPress">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          let isMac = navigator.platform.includes("Mac");
-          let accelKeyPressed = isMac? event.metaKey : event.ctrlKey;
-
-          // 118 is the decimal code for "v" character, 13 keyCode for "return" key
-          if (((accelKeyPressed && event.charCode != 118) || event.altKey) &&
-              event.keyCode != 13)
-            return;
-
-          if (event.charCode == 0 &&  // it's not a character, it's a command key
-              (event.keyCode != 13 && // Return
-               event.keyCode != 8 &&  // Backspace
-               event.keyCode != 46))  // Delete
-            return;
-
-          if (accelKeyPressed ||
-              !Services.prefs.getBoolPref("accessibility.typeaheadfind"))
-            document.getBindingParent(this).editor.focus();
-
-          // Returns for Ctrl+V
-          if (accelKeyPressed)
-            return;
-
-          const masks = Ci.nsIDOMNSEvent;
-          var modifiers = 0;
-          if (event.shiftKey)
-            modifiers |= masks.SHIFT_MASK;
-          if (event.ctrlKey)
-            modifiers |= masks.CONTROL_MASK;
-          if (event.altKey)
-            modifiers |= masks.ALT_MASK;
-          if (event.metaKey)
-            modifiers |= masks.META_MASK;
-          if (event.accelKey)
-            modifiers |= isMac ? masks.META_MASK : masks.CONTROL_MASK;
-
-          // resend the event
-          window.QueryInterface(Ci.nsIInterfaceRequestor)
-                .getInterface(Ci.nsIDOMWindowUtils)
-                .sendKeyEvent(event.type, event.keyCode, event.charCode, modifiers);
-        ]]>
-        </body>
-      </method>
-
-      <method name="browserDblClick">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          if (!Services.prefs.getBoolPref("messenger.conversations.doubleClickToReply"))
-            return;
-
-          for (let node = event.target; node; node = node.parentNode) {
-            if (node._originalMsg) {
-              let msg = node._originalMsg;
-              let actions = msg.getActions();
-              if (actions.length >= 1) {
-                actions[0].run();
-                return;
-              }
-              if (msg.system || msg.outgoing || !msg.incoming || msg.error ||
-                  !this._conv.isChat)
-                return;
-              // Add msg.who to leading list of nicks.
-              let text = this.editor.value;
-              if (text.includes(msg.who))
-                return;
-              let secondNick = false;
-              let pos = text.indexOf(":");
-              if (pos != -1) {
-                let completions = Array.from(this.buddies.keys());
-                // Check if the preceding words are a sequence of nicks.
-                let preceding = text.substring(0, pos).split(", ");
-                if (preceding.every(n => completions.includes(n)))
-                  secondNick = true;
-              }
-              this.addPrompt(msg.who + (secondNick ? ", " : ": "));
-              if (this._completions)
-                delete this._completions;
-              return;
-            }
-          }
-        ]]>
-        </body>
-      </method>
-
-      <!-- Replace the current selection in the editor by the given string -->
-      <method name="addString">
-        <parameter name="aString"/>
-        <body>
-        <![CDATA[
-          var editor = this.editor;
-          var length = (aString != "")
-                       ? aString.length
-                       : 0;
-
-          var cursorPosition = editor.selectionStart + length;
-
-          editor.value = editor.value.substr(0, editor.selectionStart) + aString +
-                         editor.value.substr(editor.selectionEnd);
-          editor.selectionStart = editor.selectionEnd = cursorPosition;
-          this.inputValueChanged();
-        ]]>
-        </body>
-      </method>
-
-      <method name="addPrompt">
-        <parameter name="aPrompt"/>
-        <body>
-        <![CDATA[
-          let editor = this.editor;
-          let currentEditorValue = editor.value;
-          if (!currentEditorValue.startsWith(aPrompt))
-            editor.value = aPrompt + currentEditorValue;
-          editor.focus();
-          this.inputValueChanged();
-        ]]>
-        </body>
-      </method>
-
-      <!-- Update the participant count of a chat conversation -->
-      <method name="updateParticipantCount">
-        <body>
-        <![CDATA[
-          this.getElt("participantCount").value = this._nicks.length;
-        ]]>
-        </body>
-      </method>
-
-      <!-- Set the attributes (flags) of a chat buddy -->
-      <method name="setBuddyAttributes">
-        <parameter name="aItem"/>
-        <body>
-        <![CDATA[
-          var buddy = aItem.chatBuddy;
-          var image;
-           if (!buddy.noFlags) {
-            if (buddy.founder)
-              image = "founder";
-            else if (buddy.op)
-              image = "operator";
-            else if (buddy.halfOp)
-              image = "half-operator";
-            else if (buddy.voiced)
-              image = "voice";
-          }
-          if (image) {
-            aItem.setAttribute("image", "chrome://instantbird/skin/" + image + ".png");
-            aItem.setAttribute("aria-label",
-              this.bundle.formatStringFromName("participant." + image,
-                [aItem.getAttribute("label")], 1));
-          }
-          else {
-            aItem.removeAttribute("image");
-            aItem.removeAttribute("aria-label");
-          }
-        ]]>
-        </body>
-      </method>
-
-      <!-- compute color for a nick -->
-      <method name="_computeColor">
-        <parameter name="aName"/>
-        <body>
-        <![CDATA[
-          // Compute the color based on the nick
-          var nick = aName.match(/[a-zA-Z0-9]+/);
-          nick = nick ? nick[0].toLowerCase() : nick = aName;
-          var weight = 10;
-          var res = 0;
-          for (var i = 0; i < nick.length; ++i) {
-            var char = nick.charCodeAt(i) - 47;
-            if (char > 10)
-              char -= 39;
-            // now char contains a value between 1 and 36
-            res += char * weight;
-            weight *= 0.52; //arbitrary
-          }
-          return Math.round(res) % 360;
-        ]]>
-        </body>
-      </method>
-
-      <!-- Returns the CSS color style for a nick color -->
-      <method name="_getColorStyle">
-        <parameter name="aColor"/>
-        <body>
-        <![CDATA[
-          return "color: hsl(" + aColor + ", 100%, 40%);";
-        ]]>
-        </body>
-      </method>
-
-      <!-- Set buddy color attributes -->
-      <method name="_setBuddyColor">
-        <parameter name="aBuddy"/>
-        <body>
-        <![CDATA[
-          let color = this._computeColor(aBuddy.chatBuddy.name);
-          aBuddy.color = color;
-          let style = this._getColorStyle(color);
-          aBuddy.colorStyle = style;
-          aBuddy.setAttribute("style", style);
-        ]]>
-        </body>
-      </method>
-
-      <!-- Set nick to active if the last message is not older than
-           nickActiveTimespan. -->
-      <method name="_activateBuddy">
-        <parameter name="aBuddy"/>
-        <parameter name="aLastMsgTime"/>
-        <body>
-        <![CDATA[
-          if (!aBuddy.colorStyle)
-            this._setBuddyColor(aBuddy);
-          let nickActiveTimespan =
-            Services.prefs.getIntPref("messenger.conversations.nickActiveTimespan");
-          if (nickActiveTimespan > 0) {
-            let waitBeforeInactive =
-              (aLastMsgTime + nickActiveTimespan) * 1000 - Date.now();
-            // To avoid "blinking" nicks, don't bother setting to active
-            // if there's less than 5s left to go.
-            if (waitBeforeInactive < 5000)
-              return aBuddy.colorStyle;
-            // Set a timer so the nick will return to inactive again.
-            if (aBuddy.activeTimer)
-              clearTimeout(aBuddy.activeTimer);
-            aBuddy.activeTimer = setTimeout(function() {
-              delete aBuddy.activeTimer;
-              aBuddy.setAttribute("inactive", "true");
-            }, waitBeforeInactive);
-          }
-          aBuddy.lastMsgTime = aLastMsgTime;
-          aBuddy.removeAttribute("inactive");
-          return aBuddy.colorStyle;
-        ]]>
-        </body>
-      </method>
-
-      <!-- Add a buddy in the visible list of participants.
-           If aShouldAppendDirectly is true, the buddy will be added to the end
-           of the participant list, skipping the search for the correct
-           insert position to optimize performance. -->
-      <method name="addBuddy">
-        <parameter name="aBuddy"/>
-        <parameter name="aShouldAppendDirectly"/>
-        <body>
-        <![CDATA[
-          var name = aBuddy.name;
-          if (!name)
-            throw "The empty string isn't a valid nick.";
-          if (this.buddies.has(name))
-            throw "Adding chat buddy " + name + " twice?!";
-
-          this.trackNick(name);
-
-          var item = document.createElement("listitem");
-          item.chatBuddy = aBuddy;
-          item.setAttribute("class", "listitem-iconic");
-          item.setAttribute("label", name);
-          this.setBuddyAttributes(item);
-
-          item.setAttribute("inactive", "true");
-          if (Object.prototype.hasOwnProperty.call(this.partedBuddies, name)) {
-            let parted = this.partedBuddies[name];
-            // If the buddy was absent for less than this timespan (in ms),
-            // it retains its active participant status on rejoining.
-            const kRestoreActiveTimespan = 300000;
-            if (parted.lastMsgTime &&
-                (Date.now() - parted.partTime) < kRestoreActiveTimespan)
-              this._activateBuddy(item, parted.lastMsgTime);
-            delete this.partedBuddies[name];
-          }
-
-          this.buddies.set(name, item);
-          if (aShouldAppendDirectly) {
-            this.nicklistElt.appendChild(item);
-            this._nicks.push(name.toLowerCase());
-            return;
-          }
-          // Insert item at the right position
-          this.addNick(item);
-        ]]>
-        </body>
-      </method>
-
-      <!-- Array of lowercase nicks kept in the order in which they are
-           displayed in the participant list.
-           This array is for performance optimization only. To obtain the
-           capitalized list of nicks use the keys of this.buddies. -->
-      <field name="_nicks">[]</field>
-
-      <method name="addNick">
-        <parameter name="aListItem"/>
-        <body>
-        <![CDATA[
-          let nick = aListItem.chatBuddy.name.toLowerCase();
-
-          // Look for the place of the nick in the list
-          let itemCount = this._nicks.length;
-          let start = 0;
-          let end = itemCount;
-          while (start < end) {
-            let middle = start + Math.floor((end - start) / 2);
-            if (nick < this._nicks[middle])
-              end = middle;
-            else
-              start = middle + 1;
-          }
-
-          // Now insert the element
-          let nicklist = this.nicklistElt;
-          if (end == itemCount) {
-            nicklist.appendChild(aListItem);
-            this._nicks.push(nick);
-          }
-          else {
-            nicklist.insertBefore(aListItem, nicklist.getItemAtIndex(end));
-            this._nicks.splice(end, 0, nick);
-          }
-        ]]>
-        </body>
-      </method>
-
-      <!-- Update a buddy in the visible list of participants -->
-      <method name="updateBuddy">
-        <parameter name="aBuddy"/>
-        <parameter name="aOldName"/>
-        <body>
-        <![CDATA[
-          var name = aBuddy.name;
-          if (!name)
-            throw "The empty string isn't a valid nick.";
-
-          if (!aOldName) {
-            // If aOldName is null, we are changing the flags of the buddy
-            let item = this.buddies.get(name);
-            if (!item)
-              throw "Changing the flags of a chat buddy that does not exist: " + name;
-            item.chatBuddy = aBuddy;
-            this.setBuddyAttributes(item);
-            return;
-          }
-
-          // If aOldName is not null, then we are renaming the buddy
-          if (!this.buddies.has(aOldName))
-            throw "Updating a chat buddy that does not exist: " + aOldName;
-
-          if (this.buddies.has(name))
-            throw "Updating a chat buddy to an already existing one: " + name;
-
-          this.trackNick(name);
-
-          let item = this.buddies.get(aOldName);
-          item.chatBuddy = aBuddy;
-          this.buddies.delete(aOldName);
-          this.buddies.set(name, item);
-          item.setAttribute("label", name);
-
-          // Move this item to the right position if its name changed
-          this._nicks.splice(this._nicks.indexOf(aOldName.toLowerCase()), 1);
-          item.remove();
-          this.addNick(item);
-        ]]>
-        </body>
-      </method>
-
-      <method name="removeBuddy">
-        <parameter name="aName"/>
-        <body>
-        <![CDATA[
-          if (!this.buddies.has(aName))
-            throw "Cannot remove a buddy that was not in the room: " + aName;
-          let item = this.buddies.get(aName);
-          this.partedBuddies[aName] = {partTime: Date.now()};
-          if (item.activeTimer) {
-            clearTimeout(item.activeTimer);
-            this.partedBuddies[aName].lastMsgTime = item.lastMsgTime;
-          }
-          this._nicks.splice(this._nicks.indexOf(aName.toLowerCase()), 1);
-          item.remove();
-          this.buddies.delete(aName);
-        ]]>
-        </body>
-      </method>
-
-      <field name="_nickEscape">/[[\]{}()*+?.\\^$|]/g</field>
-      <method name="trackNick">
-        <parameter name="aNick"/>
-        <body>
-        <![CDATA[
-          if ("_showNickList" in this) {
-            this._showNickList[aNick.replace(this._nickEscape, "\\$&")] = true;
-            delete this._showNickRegExp;
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="getShowNickModifier">
-        <body>
-        <![CDATA[
-          return (function (aNode) {
-            if (!("_showNickRegExp" in this)) {
-              if (!("_showNickList" in this)) {
-                this._showNickList = {};
-                for (let n of this.buddies.keys())
-                  this._showNickList[n.replace(this._nickEscape, "\\$&")] = true;
-              }
-
-              // The reverse sort ensures that if we have "foo" and "foobar",
-              // "foobar" will be matched first by the regexp.
-              let nicks = Object.keys(this._showNickList).sort().reverse().join("|");
-              if (nicks) {
-                // We use \W to match for word-boundaries, as \b will not match the
-                // nick if it starts/ends with \W characters.
-                // XXX Ideally we would use unicode word boundaries:
-                // http://www.unicode.org/reports/tr29/#Word_Boundaries
-                this._showNickRegExp = new RegExp("\\W(?:" + nicks + ")\\W");
-              }
-              else {
-                // nobody, disable...
-                this._showNickRegExp = {exec: () => null};
-                return 0;
-              }
-            }
-            let exp = this._showNickRegExp;
-            let result = 0;
-            let match;
-            // Add leading/trailing spaces to match at beginning and end of
-            // the string as well. (If we used regex ^ and $, match.index would
-            // not be reliable.)
-            while ((match = exp.exec(" " + aNode.data + " "))) {
-              // \W is not zero-length, but this is cancelled by the
-              // extra leading space here.
-              let nickNode = aNode.splitText(match.index);
-              // subtract the 2 \W's to get the length of the nick.
-              aNode = nickNode.splitText(match[0].length - 2);
-              // at this point, nickNode is a text node with only the text
-              // of the nick and aNode is a text node with the text after
-              // the nick. The text in aNode hasn't been processed yet.
-              let nick = nickNode.data;
-              let elt = aNode.ownerDocument.createElement("span");
-              elt.setAttribute("class", "ib-nick");
-              if (this.buddies.has(nick)) {
-                let buddy = this.buddies.get(nick);
-                if (!buddy.colorStyle)
-                  this._setBuddyColor(buddy);
-                elt.setAttribute("style", buddy.colorStyle);
-                elt.setAttribute("nickColor", buddy.color);
-              }
-              else
-                elt.setAttribute("left", "true");
-              nickNode.parentNode.replaceChild(elt, nickNode);
-              elt.textContent = nick;
-              result += 2;
-            }
-            return result;
-          }).bind(this);
-        ]]>
-        </body>
-      </method>
-
-      <method name="updateTopic">
-        <body>
-        <![CDATA[
-          let cti = this.getElt("conv-top-info");
-          let statusMessage = this.getElt("statusMessage");
-          if (this._conv.topicSettable && !this._conv.left) {
-            cti.setAttribute("topicEditable", "true");
-            cti.setAttribute("topicContext", "");
-          }
-          else {
-            cti.removeAttribute("topicEditable");
-            cti.setAttribute("topicContext", "tabContextMenu");
-          }
-
-          var topic = this._conv.topic;
-          if (topic) {
-            cti.setAttribute("statusTooltiptext", topic);
-            cti.removeAttribute("noTopic");
-          }
-          else {
-            cti.removeAttribute("statusTooltiptext");
-            cti.setAttribute("noTopic", "true");
-            topic = this._conv.noTopicString;
-          }
-          cti.setAttribute("statusMessage", topic);
-          cti.setAttribute("statusMessageWithDash", " - " + topic);
-        ]]>
-        </body>
-      </method>
-
-      <method name="onSelect">
-        <body>
-        <![CDATA[
-          this.displayStatusText();
-          this.updateTyping(true);
-
-          if (!this.loaded)
-            return;
-
-          this.tab.removeAttribute("unread");
-          this.tab.removeAttribute("attention");
-          this._conv.markAsRead();
-        ]]>
-        </body>
-      </method>
-
-      <method name="switchingToPanel">
-        <body>
-        <![CDATA[
-          // Ensure status panel updates when its text is next set.
-          window.XULBrowserWindow.statusText = "";
-
-          if (this._visibleTimer)
-            return;
-
-          // Start a timer to detect if the tab has been visible to the
-          // user for long enough to actually be seen (as opposed to the
-          // tab only being visible "accidentally in passing").
-          delete this._wasVisible;
-          this._visibleTimer = setTimeout(function() {
-            this._wasVisible = true;
-            delete this._visibleTimer;
-          }.bind(this), 1000);
-        ]]>
-        </body>
-      </method>
-
-      <method name="focus">
-        <body>
-        <![CDATA[
-          this.editor.focus();
-        ]]>
-        </body>
-      </method>
-
-      <method name="switchingAwayFromPanel">
-        <body>
-          <![CDATA[
-            if (this._visibleTimer) {
-              clearTimeout(this._visibleTimer);
-              delete this._visibleTimer;
-            }
-            // Remove the unread ruler if the tab has been visible without
-            // interruptions for sufficiently long.
-            if (this._wasVisible)
-              this.browser.removeUnreadRuler();
-          ]]>
-        </body>
-      </method>
-
-      <method name="getPanelSpecificMenuItems">
-        <body>
-          <![CDATA[
-            let items = [];
-            const XUL_NS =
-              "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-
-            let bundle =
-              Services.strings.createBundle("chrome://instantbird/locale/conversation.properties");
-            let conv = this;
-            function createMenuItem(aId, aCommandHandler) {
-              let item = document.createElementNS(XUL_NS, "menuitem");
-              item.setAttribute("label", bundle.GetStringFromName(aId + ".label"));
-              item.setAttribute("accesskey", bundle.GetStringFromName(aId + ".accesskey"));
-              item.addEventListener("command", aCommandHandler);
-              return item;
-            }
-
-            if (!this._conv.isChat && !this._conv.buddy) {
-              let menu = document.createElementNS(XUL_NS, "menu");
-              if (!this._conv.account.connected)
-                menu.setAttribute("disabled", "true");
-              let id = "contextAddContact";
-              menu.setAttribute("id", id)
-              menu.setAttribute("label", bundle.GetStringFromName(id + ".label"));
-              menu.setAttribute("accesskey",
-                                bundle.GetStringFromName(id + ".accesskey"));
-              let conv = this._conv;
-              let addContact = aTag => conv.account.addBuddy(aTag, conv.name);
-              menu.actionOnShowing = function() {
-                ChromeUtils.import("resource:///modules/ibTagMenu.jsm");
-                menu.tagMenu =
-                  new TagMenu(menu, window, id, addContact, addContact);
-              };
-              items.push(menu);
-            }
-
-            let showLogsItem = createMenuItem("contextShowLogs", () => conv.showLogs());
-            // Start disabled, then enable if we have logs.
-            showLogsItem.setAttribute("disabled", true);
-            this.hasLogs().then(aHasLogs => showLogsItem.setAttribute("disabled", !aHasLogs));
-            items.push(showLogsItem);
-
-            let hideConvItem = createMenuItem("contextHideConv", function() {
-              conv.hide();
-              document.getBindingParent(conv).removeTab(conv.tab);
-            });
-            items.push(hideConvItem);
-
-            let closeConvItem = createMenuItem("contextCloseConv", function() {
-              conv.close();
-              document.getBindingParent(conv).removeTab(conv.tab);
-            });
-            items.push(closeConvItem);
-
-            return items;
-          ]]>
-        </body>
-      </method>
-
-      <method name="hasLogs">
-        <body>
-        <![CDATA[
-          return Services.logs.getLogsForConversation(this.conv)
-                              .then(aLogs => aLogs.hasMoreElements());
-        ]]>
-        </body>
-      </method>
-
-      <method name="showLogs">
-        <body>
-        <![CDATA[
-          Services.logs.getLogsForConversation(this.conv, true).then(aLogs => {
-            if (!aLogs || !aLogs.hasMoreElements())
-              return;
-            window.openDialog("chrome://instantbird/content/viewlog.xul",
-                              "Logs", "chrome,resizable", {logs: aLogs},
-                              this.conv.title);
-          });
-        ]]>
-        </body>
-      </method>
-
-      <field name="_statusText">""</field>
-      <method name="displayStatusText">
-        <body>
-        <![CDATA[
-          if (!this.tab.selected)
-            return;
-          let convStatusContainer = this.getElt("convStatusContainer");
-          let convStatus = this.getElt("convStatus");
-          convStatus.value = this._statusText;
-          if (this._statusText.length)
-            convStatusContainer.removeAttribute("hidden");
-          else
-            convStatusContainer.setAttribute("hidden", "true");
-        ]]>
-        </body>
-      </method>
-
-      <field name="_currentTypingName">""</field>
-      <method name="updateTyping">
-        <parameter name="aForceUpdate"/>
-        <body>
-        <![CDATA[
-          let typingState = this._conv.typingState;
-          if (typingState == this.typingState && !aForceUpdate)
-            return;
-
-          this.tab.removeAttribute("typing");
-          this.tab.removeAttribute("typed");
-
-          let typingText = "";
-          let name = this._currentTypingName;
-          if (!this._currentTypingName) {
-            // This regex is intended to get a shortened name for prpls that
-            // don't provide a _currentTypingName.
-            name = this._conv.title.replace(/^([a-zA-Z0-9.]+)[@\s].*/, "$1");
-          }
-          if (typingState == Ci.prplIConvIM.TYPING) {
-            this.tab.setAttribute("typing", "true");
-            typingText = this.bundle.formatStringFromName("isTyping", [name], 1);
-          }
-          else if (typingState == Ci.prplIConvIM.TYPED) {
-            this.tab.setAttribute("typed", "true");
-            typingText =
-              this.bundle.formatStringFromName("hasStoppedTyping", [name], 1);
-          }
-          this.typingState = typingState;
-
-          // Use browser URL popups for a more lightweight typing text display
-          // than displayStatusText provides.
-          if (this.tab.selected && "XULBrowserWindow" in window)
-            window.XULBrowserWindow.setStatus(typingText);
-        ]]>
-        </body>
-      </method>
-
-      <method name="getElt">
-        <parameter name="aAnonId"/>
-        <body>
-        <![CDATA[
-          return document.getAnonymousElementByAttribute(this, "anonid", aAnonId);
-        ]]>
-        </body>
-      </method>
-
-      <method name="updateConvStatus">
-        <body>
-        <![CDATA[
-          let cti = this.getElt("conv-top-info");
-          cti.setAttribute("prplIcon", this._conv.account.protocol.iconBaseURI + "icon.png");
-
-          let tab = this.tab;
-          let displayName = this._conv.title;
-          if (this._conv.isChat) {
-            if (tab) {
-              if (this._conv.joining)
-                tab.setAttribute("status", "joining");
-              else if (!this._conv.account.connected || this._conv.left)
-                tab.setAttribute("status", "left");
-              else
-                tab.removeAttribute("status");
-            }
-            let account = this._conv.account;
-            let targetTooltip =
-              this.bundle.formatStringFromName("targetTooltipChat",
-                                               [displayName, account.name,
-                                                account.protocol.name], 3);
-            cti.setAttribute("targetTooltiptext",  targetTooltip);
-          }
-          else {
-            let statusText = "";
-            let statusType = Ci.imIStatusInfo.STATUS_UNKNOWN;
-
-            let buddy = this._conv.buddy;
-            if (!buddy || !buddy.account.connected) {
-              if (tab)
-                tab.removeAttribute("status");
-
-              // This is ugly, but when an account gets disconnected libpurple
-              // doesn't reset the typing state... :(
-              this.typingState = Ci.prplIConvIM.NOT_TYPING;
-              this.updateTyping();
-            }
-            else {
-              displayName = buddy.displayName;
-              statusText = buddy.statusText;
-              statusType = buddy.statusType;
-              if (tab)
-                tab.setAttribute("status", Status.toAttribute(statusType));
-              cti.setAttribute("userIcon", buddy.buddyIconFilename);
-            }
-
-            let targetTooltip =
-              this.bundle.formatStringFromName("targetTooltipIM",
-                                               [this._conv.title,
-                                                this._conv.account.protocol.name], 2);
-            if (buddy && buddy.buddy.contact &&
-                buddy.buddy.contact.getBuddies().length > 1)
-              targetTooltip += this.bundle.GetStringFromName("targetChangeable");
-            cti.setAttribute("targetTooltiptext", targetTooltip);
-
-            if (statusText)
-              statusText = " - " + statusText;
-            cti.setAttribute("statusMessageWithDash", statusText);
-            let statusString = Status.toLabel(statusType);
-            cti.setAttribute("statusMessage", statusString + statusText);
-            cti.setAttribute("status", Status.toAttribute(statusType));
-            cti.setAttribute("statusTypeTooltiptext", statusString);
-          }
-
-          cti.setAttribute("displayName", displayName);
-          if (tab)
-            tab.setAttribute("label", displayName);
-        ]]>
-        </body>
-      </method>
-
-      <method name="initConversationUI">
-        <body>
-        <![CDATA[
-          let cti = this.getElt("conv-top-info");
-          // The toolbarbuttons for different services to be added below.
-
-          // Target switcher button.
-          let targetSwitcher = document.createElement("toolbarbutton");
-          targetSwitcher.setAttribute("disabled", "true");
-          targetSwitcher.classList.add("alltargets-button");
-          let account = this._conv.account;
-          targetSwitcher.setAttribute("image",
-                                      account.protocol.iconBaseURI + "icon.png");
-          let targetTooltip =
-            this.bundle.formatStringFromName("targetTooltipChat",
-                                             [this._conv.title,
-                                              account.name,
-                                              account.protocol.name], 3);
-          targetSwitcher.setAttribute("tooltiptext", targetTooltip);
-          let targetPopup = document.createElement("menupopup");
-          targetPopup.classList.add("all-targets-popup");
-          targetPopup.setAttribute("position", "after_end");
-          targetSwitcher.appendChild(targetPopup);
-          cti.appendChild(targetSwitcher);
-
-          if (this._conv.isChat) {
-            this.updateTopic();
-            this.setAttribute("chat", "true");
-            this.tab.setAttribute("chat", "true");
-            this.tab.setAttribute("prpl", this._conv.account.protocol.id);
-
-            cti.setAttribute("displayName", this._conv.title);
-            cti.setAttribute("status", "chat");
-
-            // Set an id on the participant count for accessibility reasons (see bug 216)
-            let id = "pc" + Date.now();
-            this.getElt("participantLabel").setAttribute("control", id);
-            this.getElt("participantCount").setAttribute("id", id);
-
-            // Populate the nicklist
-            this.buddies = new Map();
-            this.partedBuddies = {};
-            this._nicks = [];
-            this.nicklistElt = this.getElt("nicklist");
-            let enumerator = this.conv.getParticipants();
-            let chatBuddies = [];
-            while (enumerator.hasMoreElements()) {
-              let buddy = enumerator.getNext();
-              chatBuddies.push({name: buddy.name.toLowerCase(), buddy: buddy});
-            }
-            chatBuddies.sort((a, b) => a.name < b.name ? -1 : 1)
-                       .forEach(a => this.addBuddy(a.buddy, true));
-            this.updateParticipantCount();
-            if (Services.prefs.getBoolPref("messenger.conversations.showNicks"))
-              this.browser.addTextModifier(this.getShowNickModifier());
-          }
-          else if (this._conv.contact && this._conv.contact.getBuddies().length > 1)
-            this.getElt("conv-top-info").allowTargetChange();
-
-          if (this.tab) {
-            this.tab.setAttribute("label", this._conv.title);
-            this.tab.setAttribute("tooltip", "imTooltip");
-          }
-
-          this.findbar.browser = this.browser;
-
-          if (!("Status" in window))
-            ChromeUtils.import("resource:///modules/imStatusUtils.jsm");
-          this.updateConvStatus();
-          this.initTextboxFormat();
-        ]]>
-        </body>
-      </method>
-
-      <!-- nsIObserver implementation -->
-      <method name="observe">
-        <parameter name="aSubject"/>
-        <parameter name="aTopic"/>
-        <parameter name="aData"/>
-        <body>
-        <![CDATA[
-          if (aTopic == "conversation-loaded") {
-            if (aSubject != this.browser)
-              return;
-
-            this.browser.progressBar = this.getElt("browserProgress");
-
-            if (!("Interruptions" in window))
-              ChromeUtils.import("resource:///modules/ibInterruptions.jsm");
-
-            // Display all queued messages. Use a timeout so that message text
-            // modifiers can be added with observers for this notification.
-            if (!this.loaded)
-              setTimeout(this._showFirstMessages.bind(this), 0);
-
-            Services.obs.removeObserver(this, "conversation-loaded");
-            return;
-          }
-
-          switch(aTopic) {
-          case "new-text":
-            if (this.loaded)
-              this.addMsg(aSubject);
-            break;
-
-          case "update-typing":
-            this._currentTypingName = aData;
-            this.updateTyping();
-            break;
-
-          case "status-text-changed":
-            this._statusText = aData;
-            this.displayStatusText();
-            break;
-
-          case "replying-to-prompt":
-            this.addPrompt(aData);
-            break;
-
-          case "update-conv-buddy":
-          case "target-prpl-conversation-changed":
-          case "update-conv-title":
-          case "update-buddy-display-name":
-          case "update-buddy-status":
-          case "update-buddy-icon":
-          case "update-conv-chatjoining":
-            this.updateConvStatus();
-            break;
-
-          case "update-conv-chatleft":
-            this.updateConvStatus();
-            this.updateTopic();
-            break;
-
-          case "chat-buddy-add":
-            aSubject.QueryInterface(Ci.nsISimpleEnumerator);
-            while (aSubject.hasMoreElements())
-              this.addBuddy(aSubject.getNext());
-            this.updateParticipantCount();
-            break;
-
-          case "chat-buddy-remove":
-            aSubject.QueryInterface(Ci.nsISimpleEnumerator);
-            while (aSubject.hasMoreElements()) {
-              let nick = aSubject.getNext();
-              nick.QueryInterface(Ci.nsISupportsString);
-              this.removeBuddy(nick.toString());
-            }
-            this.updateParticipantCount();
-            break;
-
-          case "chat-buddy-update":
-            this.updateBuddy(aSubject, aData);
-            break;
-          case "chat-update-topic":
-            this.updateTopic();
-            break;
-
-          case "ui-conversation-closed":
-          case "ui-conversation-destroyed":
-            this.editor.disabled = true;
-            this._forgetConv();
-            break;
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="onNicklistKeyPress">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          if (event.keyCode != event.DOM_VK_RETURN)
-            return;
-
-          let listbox = event.originalTarget;
-          if (listbox.selectedCount == 0)
-            return;
-
-          let newConv;
-          for (let i = 0; i < listbox.selectedCount; ++i) {
-            let nick = listbox.getSelectedItem(i).chatBuddy.name;
-            let name = this._conv.target.getNormalizedChatBuddyName(nick);
-            newConv = this._conv.account.createConversation(name);
-          }
-          // Only focus last of the opened conversations.
-          Conversations.focusConversation(newConv);
-        ]]>
-        </body>
-      </method>
-
-      <method name="onNickClick">
-        <parameter name="event"/>
-        <body>
-        <![CDATA[
-          // Open a private conversation in new tab on a middle or double click.
-          if (event.button == 1 || (event.button == 0 && event.detail == 2)) {
-            var nick = event.originalTarget.chatBuddy.name;
-            let name = this._conv.target.getNormalizedChatBuddyName(nick);
-            let newConv = this._conv.account.createConversation(name);
-            Conversations.focusConversation(newConv);
-          }
-        ]]>
-        </body>
-      </method>
-
-      <property name="convId">
-        <getter>
-        <![CDATA[
-          return this._conv.id;
-        ]]>
-        </getter>
-      </property>
-
-      <property name="conv">
-        <getter>
-        <![CDATA[
-          return this._conv;
-        ]]>
-        </getter>
-        <setter>
-        <![CDATA[
-          if (this._conv && val)
-            throw("Already initialized");
-          if (!val) {
-            // this conversation has probably been moved to another
-            // tab. Forget the prplConversation so that it isn't
-            // closed when destroying this binding.
-            this._forgetConv();
-            return val;
-          }
-          this._conv = val;
-          this._conv.addObserver(this);
-          Conversations.registerConversation(this);
-          this.browser.init(this._conv);
-          this.initConversationUI();
-          return val;
-        ]]>
-        </setter>
-      </property>
-
-      <field name="_editor">null</field>
-      <property name="editor">
-        <getter>
-        <![CDATA[
-          if (!this._editor)
-            this._editor = this.getElt("inputBox");
-          return this._editor;
-        ]]>
-        </getter>
-      </property>
-
-      <property name="browser" onget="return this.getElt('browser');"/>
-      <property name="contentWindow" onget="return this.browser.contentWindow;"/>
-      <property name="findbar" onget="return this.getElt('FindToolbar');"/>
-
-      <property name="bundle">
-        <getter>
-        <![CDATA[
-          if (!this._bundle) {
-            this._bundle =
-              Services.strings
-                      .createBundle("chrome://instantbird/locale/instantbird.properties");
-          }
-          return this._bundle;
-       ]]>
-       </getter>
-      </property>
-    </implementation>
-  </binding>
-
-  <binding id="conv-info-large"
-           extends="chrome://global/content/bindings/toolbar.xml#toolbar">
-    <content>
-    <xul:stack anonid="statusImageStack" class="statusImageStack">
-      <!-- The box around the user icon is a workaround for bug 955673. -->
-      <xul:box class="userIconHolder" xbl:inherits="userIcon">
-        <xul:image anonid="userIcon" class="userIcon" mousethrough="always"
-                   xbl:inherits="src=userIcon"/>
-      </xul:box>
-      <xul:image anonid="statusTypeIcon" class="statusTypeIcon"
-                 xbl:inherits="status,tooltiptext=statusTypeTooltiptext"/>
-    </xul:stack>
-    <xul:stack class="displayNameAndstatusMessageStack"
-               mousethrough="always" flex="1">
-      <xul:hbox align="right" flex="1" class="displayNameAndToolbar">
-        <xul:description anonid="displayName" class="displayName" flex="1"
-                         crop="end" xbl:inherits="value=displayName"/>
-        <!-- Set "context" else context attribute from parent node is used. -->
-        <xul:hbox class="convToolbar" mousethrough="always" context="">
-          <children/>
-        </xul:hbox>
-      </xul:hbox>
-      <xul:description anonid="statusMessage" class="statusMessage"
-                       xbl:inherits="value=statusMessage,tooltiptext=statusTooltiptext,editable=topicEditable,editing,noTopic,context=topicContext,role=topicRole"
-                       mousethrough="never" crop="end" flex="100000"/>
-    </xul:stack>
-    </content>
-
-    <implementation>
-      <constructor>
-        <![CDATA[
-          this.topic
-              .addEventListener("click", this.startEditTopic.bind(this));
-          // Cancel any ongoing edit if the binding changes.
-          this.editing = false;
-
-          if (navigator.platform.includes("Mac")) {
-            if ("draghandle" in this)
-              return;
-            if (!("WindowDraggingElement" in window))
-              ChromeUtils.import("resource://gre/modules/WindowDraggingUtils.jsm");
-            this.draghandle = new WindowDraggingElement(this, window);
-          }
-        ]]>
-      </constructor>
-
-      <property name="topic">
-        <getter>
-        <![CDATA[
-          return document.getAnonymousElementByAttribute(this, "anonid",
-                                                         "statusMessage");
-        ]]>
-        </getter>
-      </property>
-
-      <property name="editing">
-        <getter>
-        <![CDATA[
-          return this.hasAttribute("editing");
-        ]]>
-        </getter>
-        <setter>
-        <![CDATA[
-          if (val) {
-            this.setAttribute("editing", "true");
-            this.removeAttribute("topicRole");
-          }
-          else {
-            this.removeAttribute("editing");
-            if (this.topic.hasAttribute("editable")) {
-              // Sets role=button on the topic to denote it is clickable
-              // for accessibility.
-              this.setAttribute("topicRole", "button");
-            }
-          }
-        ]]>
-        </setter>
-      </property>
-
-      <method name="finishEditTopic">
-        <parameter name="aSave"/>
-        <body>
-        <![CDATA[
-          if (!this.editing)
-            return;
-
-          let elt = this.topic;
-          let convBinding = document.getBindingParent(this);
-          if (aSave) {
-            // apply the new topic only if it is different from the current one
-            if (elt.value != convBinding._conv.topic)
-              convBinding._conv.topic = elt.value;
-          }
-          this.editing = false;
-          elt.removeEventListener("keypress", this._topicKeyPress, true);
-          delete this._topicKeyPress;
-          elt.removeEventListener("blur", this._topicBlur);
-          delete this._topicBlur;
-          if (!elt.getAttribute("focused"))
-            return;
-          // Shift focus back to the input box. Ideally we would keep the focus
-          // on the topic here, but the conv-top is currently not accessible
-          // via the keyboard, so doing that would leave us stranded.
-          convBinding.editor.focus();
-        ]]>
-        </body>
-      </method>
-
-      <method name="topicKeyPress">
-        <parameter name="aEvent"/>
-        <body>
-        <![CDATA[
-          switch (aEvent.keyCode) {
-            case aEvent.DOM_VK_RETURN:
-              this.finishEditTopic(true);
-              break;
-
-            case aEvent.DOM_VK_ESCAPE:
-              this.finishEditTopic(false);
-              aEvent.stopPropagation();
-              aEvent.preventDefault();
-              break;
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="topicBlur">
-        <parameter name="aEvent"/>
-        <body>
-        <![CDATA[
-          if (aEvent.originalTarget == this.topic.inputField)
-            this.finishEditTopic(true);
-        ]]>
-        </body>
-      </method>
-
-      <method name="startEditTopic">
-        <body>
-        <![CDATA[
-          let elt = this.topic;
-          if (!elt.hasAttribute("editable") || this.editing)
-            return;
-
-          this.editing = true;
-          this._topicKeyPress = this.topicKeyPress.bind(this);
-          elt.addEventListener("keypress", this._topicKeyPress);
-          this._topicBlur = this.topicBlur.bind(this);
-          elt.addEventListener("blur", this._topicBlur);
-          // force binding attachment by forcing layout
-          elt.getBoundingClientRect();
-          if (this.hasAttribute("noTopic"))
-            elt.value = "";
-          elt.select();
-        ]]>
-        </body>
-      </method>
-
-      <method name="allowTargetChange">
-        <body>
-        <![CDATA[
-          let targetButton = this.querySelector(".alltargets-button");
-          targetButton.setAttribute("type", "menu");
-          targetButton.setAttribute("mousethrough", "never");
-          this.setAttribute("allowTargetChange", "true");
-          let popup = this.querySelector(".all-targets-popup");
-          popup.addEventListener("popupshowing", this.showAllTargets.bind(this));
-          popup.addEventListener("popuphiding", this.hideAllTargets.bind(this));
-          targetButton.removeAttribute("disabled");
-        ]]>
-        </body>
-      </method>
-
-      <method name="showAllTargets">
-        <body>
-        <![CDATA[
-          let popup = this.querySelector(".all-targets-popup");
-          let _conv = document.getBindingParent(this)._conv;
-          if (!_conv.contact)
-            return;
-          let currentBuddyId = _conv.target.buddy.buddy.id;
-          let buddies = _conv.contact.getBuddies();
-          for (let buddy of buddies) {
-            let menuItem = document.createElementNS(
-              "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-              "menuitem");
-            menuItem.setAttribute("class", "menuitem-iconic alltargets-item");
-            menuItem.setAttribute("label", buddy.displayName);
-            menuItem.setAttribute("crop", "end");
-            menuItem.setAttribute("image", buddy.protocol.iconBaseURI + "icon.png");
-            if (buddy.id == currentBuddyId)
-              menuItem.setAttribute("selected", "true");
-            if (!buddy.canSendMessage)
-              menuItem.setAttribute("disabled", "true");
-            let statusText = buddy.statusText;
-            if (statusText)
-              menuItem.setAttribute("description", statusText);
-            menuItem.setAttribute("status", Status.toAttribute(buddy.statusType));
-            menuItem.buddy = buddy;
-            popup.appendChild(menuItem);
-          }
-          popup.addEventListener("command", this.changeTargetCommand);
-        ]]>
-        </body>
-      </method>
-
-      <method name="changeTargetCommand">
-        <parameter name="aEvent"/>
-        <body>
-        <![CDATA[
-          let buddy = aEvent.originalTarget.buddy;
-          if (buddy.canSendMessage) {
-            let conv = buddy.createConversation();
-            Services.conversations.getUIConversation(conv).target = conv;
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="hideAllTargets">
-        <body>
-        <![CDATA[
-          let popup = this.querySelector(".all-targets-popup");
-          while (popup.hasChildNodes())
-            popup.lastChild.remove();
-          popup.removeEventListener("command", this.changeTargetCommand);
-        ]]>
-        </body>
-      </method>
-    </implementation>
-  </binding>
-
-  <binding id="conv-info-small"
-           extends="chrome://instantbird/content/conversation.xml#conv-info-large">
-    <content>
-      <xul:image anonid="statusTypeIcon" class="statusTypeIcon"
-                 xbl:inherits="status,tooltiptext=statusTypeTooltiptext"/>
-      <xul:description anonid="displayName" class="displayName"
-                       mousethrough="always" flex="1" crop="end"
-                       xbl:inherits="value=displayName"/>
-      <xul:description anonid="statusMessage" class="statusMessage"
-                       xbl:inherits="value=statusMessage,editable=topicEditable,editing,context=topicContext,role=topicRole"
-                       crop="end" flex="100000"/>
-      <xul:description anonid="statusMessageWithDash"
-                       class="statusMessageWithDash"
-                       xbl:inherits="value=statusMessageWithDash,tooltiptext=statusTooltiptext,editable=topicEditable,editing,noTopic,context=topicContext,role=topicRole"
-                       crop="end" flex="100000"/>
-      <xul:hbox class="convToolbar" mousethrough="always" context="">
-        <children/>
-      </xul:hbox>
-    </content>
-    <implementation>
-      <constructor>
-        <![CDATA[
-          document.getAnonymousElementByAttribute(this, "anonid", "statusMessageWithDash")
-                  .addEventListener("click", this.startEditTopic.bind(this));
-        ]]>
-     </constructor>
-    </implementation>
-  </binding>
-
-  <binding id="menuitem-target" extends="chrome://global/content/bindings/menu.xml#menuitem">
-    <content>
-      <xul:stack class="menu-iconic-left alltargets-item-icon-stack"
-                 align="center" pack="center"
-                 xbl:inherits="selected,disabled,checked">
-        <xul:image class="menu-iconic-icon alltargets-item-icon" xbl:inherits="src=image,validate,src"/>
-        <xul:image class="menu-iconic-icon status-overlay-icon" xbl:inherits="status"/>
-      </xul:stack>
-      <xul:label class="menu-iconic-text" xbl:inherits="value=label,accesskey,crop" crop="right" flex="1"/>
-      <xul:label class="menu-iconic-text menu-description" xbl:inherits="value=description" crop="right" flex="100000"/>
-    </content>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/credits.xhtml
+++ /dev/null
@@ -1,238 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-                      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
-  [
-    <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-    %brandDTD;
-    <!ENTITY % creditsDTD SYSTEM "chrome://instantbird/locale/credits.dtd">
-    %creditsDTD;
-  ]
->
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>&credit.title;</title>
-
-    <style>
-      html {
-        background-color: white;
-        color: black;
-      }
-
-      * {
-        cursor: default;
-        -moz-user-select: none;
-      }
-
-      #titleBox {
-        position: fixed;
-        left: 0px;
-        top: 0px;
-        right: 0px;
-        bottom: auto;
-        z-index: 999;
-      }
-
-      #footerBox {
-        position: fixed;
-        left: 0px;
-        top: auto;
-        right: 0px;
-        bottom: 0px;
-        z-index: 999;
-      }
-
-      #creditsBox {
-        position: absolute;
-        left: 0px;
-        top: 0px;
-        bottom:8px;
-        overflow: hidden;
-        z-index: 1;
-        width: 280px;
-        margin-left: 10px;
-        margin-right: 10px;
-        font-family: Arial, sans-serif;
-        font-size: 12px;
-      }
-
-      #creditsBox > .title > .motto {
-        margin-bottom: 180px;
-      }
-
-      h3 {
-        font-weight: bold;
-        font-size: 12px;
-        text-align: center;
-        margin: 15px 0px 5px 0px;
-      }
-
-      .creditsGroup {
-        margin-bottom: 1px;
-        text-align: center;
-      }
-
-      .footnote {
-        font-size: 10px;
-        text-align: justify;
-        padding-bottom: 40px;
-      }
-
-      h2.title {
-        margin-top: 200px;
-        margin-bottom: 100px;
-        text-align: center;
-      }
-
-      .motto {
-        margin-top: 2px;
-        font-style: italic;
-        font-size: 12px;
-        font-weight: normal;
-        padding-left: 2em;
-      }
-
-      #gecko {
-        margin-top:    90px;
-        margin-bottom: 90px;
-        font-size: 13px;
-      }
-
-      a {
-        color: blue;
-        text-decoration: underline;
-      }
-
-      ul {
-        margin-top: 0px;
-        margin-left: 0px;
-        padding-left: 0px;
-      }
-
-      li {
-        list-style-type: none;
-      }
-
-      .center {
-        text-align: center;
-      }
-    </style>
-
-    <script type="application/javascript" src="chrome://global/content/globalOverlay.js"></script>
-    <script type="application/javascript">
-    <![CDATA[
-
-      var gCreditsInterval = -1;
-
-      function uninit()
-      {
-        if (gCreditsInterval > -1)
-          clearInterval(gCreditsInterval);
-      }
-
-      function init()
-      {
-        var cb = document.getElementById("creditsBox");
-        cb.scrollTop = 0;
-        setTimeout(runCredits, 3000);
-      }
-
-      function runCredits()
-      {
-        gCreditsInterval = setInterval("creditsCallback()", 25);
-      }
-
-      function creditsCallback()
-      {
-        var cb = document.getElementById("creditsBox");
-        var newtop = cb.scrollTop + 1;
-        cb.scrollTop = newtop;
-        if (cb.scrollTop != newtop) {
-          // we're at the bottom
-          clearInterval(gCreditsInterval);
-          setTimeout(function() { cb.scrollTop = 0 }, 10000);
-        }
-      }
-
-      function openContributors(aEvent)
-      {
-        // Always prevent the default action even if loading throws, to
-        // avoid replacing the current document with an external page.
-        aEvent.preventDefault();
-
-        var ioService = Cc["@mozilla.org/network/io-service;1"].
-                        getService(Ci.nsIIOService);
-        Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-          .getService(Ci.nsIExternalProtocolService)
-          .loadURI(ioService.newURI(aEvent.target.href));
-      }
-
-    ]]>
-    </script>
-  </head>
-  <body onload="init();" onunload="uninit();">
-    <div id="titleBox">
-      <img src="chrome://branding/content/about-credits.png" />
-    </div>
-
-    <div id="creditsBox">
-        <h2 class="title">&brandFullName;
-          <div class="motto">&brandMotto;</div>
-        </h2>
-
-        <div class="creditsGroup">
-          <h3>&credit.lead;</h3>
-          <div class="credit">Florian Quèze</div>
-        </div>
-
-        <div class="creditsGroup">
-          <h3>&credit.contributors;</h3>
-          <div class="credit">Alexander Slovesnik</div>
-          <div class="credit">Alexandre Abraham</div>
-          <div class="credit">Benedikt Pfeifer</div>
-          <div class="credit">Daniel Scruton</div>
-          <div class="credit">Florian Janßen</div>
-          <div class="credit">Mark Yen</div>
-          <div class="credit">Matt d'Entremont</div>
-          <div class="credit">Nihanth Subramanya</div>
-          <div class="credit">Patrick Cloke</div>
-          <div class="credit">Quentin Castier</div>
-          <div class="credit">Quentin Headen</div>
-          <div class="credit">Quentin Raynaud</div>
-          <div class="credit">Romain Bezut</div>
-          <div class="credit">Varuna Jayasiri</div>
-          <div class="credit">Will Nayes</div>
-        </div>
-
-        <div class="creditsGroup">
-          <h3>&credit.thanks;</h3>
-          <div class="credit">
-          <ul>
-            <li>Mozilla developers</li>
-            <li>The Pidgin team</li>
-            <li>Cré'Innov</li>
-          </ul>
-          </div>
-
-          &credit.translation;
-
-        </div>
-
-        <p id="gecko" class="center">&credit.poweredByGecko;</p>
-
-        <p class="footnote">
-          &brandFullName; &license.part0; &copy;2007-2015 &license.part1;
-          <a href="http://www.instantbird.com/thanks.html" onclick="openContributors(event);">&license.contrib;</a>,
-          &license.part2;
-          <a onclick="openDialog('about:license');">&credit.license;</a>
-          &license.part3;</p>
-
-    </div>
-
-    <div id="footerBox">
-      <img src="chrome://branding/content/about-footer.png"/>
-    </div>
-  </body>
-</html>
deleted file mode 100644
--- a/im/content/debug/debug.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var configWindow = "chrome://global/content/config.xul";
-
-var debug = {
-  aboutMemory: function debug_aboutMemory() {
-    openDialog("about:memory");
-  },
-
-  config: function debug_config() {
-    Core.showWindow("Preferences:ConfigManager", configWindow, "Config",
-                    "chrome,resizable,centerscreen");
-  },
-
-  inspector: function debug_inspector() {
-    inspectDOMDocument(document);
-  },
-
-  garbageCollect: function debug_garbageCollect() {
-    window.QueryInterface(Ci.nsIInterfaceRequestor)
-          .getInterface(Ci.nsIDOMWindowUtils)
-          .garbageCollect();
-  },
-
-  forceOnline: function debug_forceOnline() {
-    var ios = Services.io;
-    ios.manageOfflineStatus = false;
-    ios.offline = false;
-  },
-
-  load: function debug_load() {
-    setTimeout(function() {
-      // Load the Window DataSource so that browser windows opened subsequent to DOM
-      // Inspector show up in the DOM Inspector's window list.
-      var windowDS = Cc["@mozilla.org/rdf/datasource;1?name=window-mediator"]
-                       .getService(Ci.nsIWindowDataSource);
-    }, 0);
-  }
-};
-
-window.addEventListener("load", debug.load);
-
-function debug_enumerateProtocols()
-{
-  dump("trying to enumerate protocols:\n");
-  for (let proto of getIter(Services.core.getProtocols())) {
-    dump(" " + proto.name + " " + proto.id + "\n");
-    for (let opt of getIter(proto.getOptions())) {
-      var type = { };
-      type[opt.typeBool] = ["bool", opt.getBool];
-      type[opt.typeInt] = ["int", opt.getInt];
-      type[opt.typeString] = ["string", opt.getString];
-      dump("  ("+ type[opt.type][0] + ") "  +
-           opt.name + (opt.masked ? "(masked)" : "") + "\t" +
-           type[opt.type][1]() + "\n");
-    }
-  }
-}
-
-function debug_connectAccount(aProto, aName, aPassword)
-{
-  var proto = Services.core.getProtocolById(aProto);
-  if (!proto)
-    throw "Couldn't get protocol " + aProto;
-
-  var acc = Services.accounts.createAccount(aName, proto);
-  acc.password = aPassword;
-  dump("trying to connect to " + proto.name +
-       " (" + proto.id + ") with " + aName + "\n");
-  acc.connect();
-}
-
-function debug_dumpBuddyList()
-{
-  let formatBuddy = (buddy => "  " + buddy.name + "\n   " + buddy.getAccounts().map(a => a.name).join(" "));
-  let formatGroup = (aGroup => " Group " + aGroup.id + ": " + aGroup.name + "\n" + aGroup.getBuddies().map(formatBuddy).join("\n"));
-  dump("Buddy list:\n\n" + Services.tags.getTags().map(formatGroup).join("\n\n") + "\n\n");
-}
-
-function dumpStack(offset, max_depth)
-{
-  if (!offset || offset<0) offset = 0;
-  if (!max_depth) max_depth = 10;
-  var frame = Components.stack;
-  while(--max_depth && (frame=frame.caller)) {
-    if (!offset)
-      dump(frame+"\n");
-    else
-      --offset;
-  }
-  dump("\n");
-}
deleted file mode 100644
--- a/im/content/debug/debug.xul
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<overlay id="debug"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://debug/content/debug.js"/>
-  <script type="application/javascript" src="chrome://inspector/content/hooks.js"/>
-
-  <commandset id="maincommandset">
-    <command id="aboutMemoryCommand" oncommand="debug.aboutMemory()"/>
-    <command id="domiCommand" oncommand="debug.inspector()"/>
-    <command id="configCommand" oncommand="debug.config()"/>
-    <command id="gcCommand" oncommand="debug.garbageCollect()"/>
-    <command id="forceOnlineCommand" oncommand="debug.forceOnline()"/>
-  </commandset>
-
-  <keyset id="mainkeyset">
-    <key id="aboutMemoryKey" key="M" command="aboutMemoryCommand" modifiers="accel,shift"/>
-    <key id="domiKey" key="I" command="domiCommand" modifiers="accel,shift"/>
-    <key id="configKey" key="," command="configCommand" modifiers="accel,shift"/>
-    <!-- shift + ',' is '?' on a French keyboard... -->
-    <key id="configKey2" key="?" command="configCommand" modifiers="accel"/>
-    <key id="gcKey" key="C" command="gcCommand" modifiers="accel,shift"/>
-    <key id="forceOnlineKey" key="O" command="forceOnlineCommand" modifiers="accel,shift"/>
-  </keyset>
-
-  <menubar id="blistMenubar">
-    <menu label="Debug" id="debugMenu" insertafter="toolsMenu">
-      <menupopup>
-        <menuitem id="domiMenuItem" label="DOM Inspector" key="domiKey" command="domiCommand"/>
-        <menuitem id="gcMenuItem" label="Force Garbage Collection" key="gcKey" command="gcCommand"/>
-        <menuitem id="forceOnlineMenuItem" label="Force Online" key="forceOnlineKey" command="forceOnlineCommand"/>
-        <menuitem id="aboutMemoryMenuItem" label="about:memory" key="aboutMemoryKey" command="aboutMemoryCommand"/>
-        <menuseparator/>
-        <menuitem id="configMenuItem" label="about:config" key="configKey" command="configCommand"/>
-      </menupopup>
-    </menu>
-  </menubar>
-</overlay>
deleted file mode 100644
--- a/im/content/debug/fake/fake.js
+++ /dev/null
@@ -1,397 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-ChromeUtils.import("resource:///modules/imXPCOMUtils.jsm");
-ChromeUtils.import("resource:///modules/jsProtoHelper.jsm");
-
-var away = Ci.imIStatusInfo.STATUS_AWAY;
-var idle = Ci.imIStatusInfo.STATUS_IDLE;
-var mobile = Ci.imIStatusInfo.STATUS_MOBILE;
-
-var flo_img_url = 'data:image/jpeg;base64,' +
-  '/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBF' +
-  'RyB2NjIpLCBxdWFsaXR5ID0gOTUK/9sAQwACAQEBAQECAQEBAgICAgIEAwICAgIFBAQDBAYFBgYGBQYG' +
-  'BgcJCAYHCQcGBggLCAkKCgoKCgYICwwLCgwJCgoK/9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoKCgoK' +
-  'CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK/8AAEQgAMgAyAwEiAAIRAQMRAf/E' +
-  'AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUS' +
-  'ITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RV' +
-  'VldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TF' +
-  'xsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME' +
-  'BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1Lw' +
-  'FWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKD' +
-  'hIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp' +
-  '6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/PL4p3OpWF5/Y+uuElnAYiEjGM5IrNl8ZaP8GvC1v4s8I6Qk' +
-  '2uajDILSZoyTbRAlMrj+NmXGcggZx1rJm0rxn4yvLnxNrUwMEbsFkUHtxX3X/wAEh/gH8O/GepeIvjB4' +
-  'z+Hdprc/hiwsrPw1p10PMjjnl3yPdMjcbhjjtliR0FfN8OYaDrpSa5oq7ttfufP4WlGc0pLVdOlz889O' +
-  '8JftmfFG+bVdH+G/iK8iZzLGY9JlK5I5IJHXB/WsbXL/AOMPgGf+y/GngnUoVifDC809oWYHqCQo+oI5' +
-  '71/QpoviHWre9xceHYogx+RFiXj24H+c/hWh4i+H3w/8faI+n/ED4Y6beW03DrdWyPn3PFfUrESctJP5' +
-  'n0zy2MYLY/nh0D4h6jbanFNHeSwsCpt5o0x5bZ+58oBcYJ69e9e0eBPhh8Ov2gLu5e/tLK3u5YPNnxKO' +
-  'ZQPm2qTwM49uema+nv8Agsb+zV+zP8LvAGjz/CLwbp+i6xNcySiKxCxB0VfmwBjLc5x7V8Qfsqam1n8U' +
-  '4WltfswNtM0rS3B8s5zu4+qqc+9efnaqV8orcrtOMXKLXRrX8dmeHj8O6UW46NDNQ/Zu+IFrfz21po+6' +
-  'KOZliKy8FQSBjj0or2S/+IWsLfTLDPZ7BK2z5u2TiivzeOdZ3ZfD9zPE+tYryF1/wLJpfhC2Wys7mwiv' +
-  'Xylq4GTnuf1r1j4NfFX44/szfs0at4z+HlheWNl4k1xbS51HSNHGoXWLG3DYCSMkcYY3WMs2SVUKDmuf' +
-  'F/8A8LKjvdX1O2e5tLKQvEYXwqqOmK+jv2WtX8PfF39mK8+GGpaXcw2ei+K55pbZYxucPbwmN8kYwfnH' +
-  'OeQa9Dg7MK8sVOjU+JxevbbS/od2QzlWx0acuvVmz+yZ8W/2jfjZ8Ltf8WancyWj6VHGtjdapYeRLcyu' +
-  'C2xowSFIGM4OBuHTkVx/w+/bz/ae8KfEOTwV4zl1zVrdppVCy+CBcW6bH2sDPbyeYgB6ExHI+bOOa9h8' +
-  'IftRfst/DjRT8DpdT1DSdWtZEW6t5dJm2iaQcchT8ijahc4U4znBFd/4a8E+Cdd1ZfGtpob2WpuimZjG' +
-  'Pm44JGM8jvx+dfdOLp1Eoyv/AF+h+kqlTqUbt2t1Plf/AIKl/BrW/jr8A7T4uaPdWmny6RbtPNDeTnDF' +
-  'ynyKcDPQgE9eOOtfm38PvCHxG8LaaniHxL4K1W0s9ThmisL+azkSC6CEM4jkKhXZSVyoORuXPWv2/wDi' +
-  'n4d0z4uafP8ADTxPpKXGlXYWO+h3EKwDAjkdOQD+FfN/7fvgJvAHwXOneIbCwt7eLVEbwnFDG8a/YYEf' +
-  'yVWFyfKYRymNwgVWKqxHHPHjcW8Ngqkkr6Nffp+Z4eZ4WMqNSomvdjf8bHw7bWJNtGSoBKDIKc9KK6y3' +
-  '8b3ckCSL8HdYcMgIdbM4bjqKK/M3VxN/4X/ky/zPhvZ1/wCX8UO/Z38VPDpcFlq7SXFtOMSWUeS35AHj' +
-  'vX0T4A8Y3Pgfw3rOg/CzxRHZa3rTwzwW+oJuitzHuBLLxxhwT7L7V8yfst+PvCfh4ajd6lqEUN5crthW' +
-  'cZKgDtU+r/EXxT4d+Kdh8V9D15LhNNvklNrMMJMgb5o3H91lLKeOjVrhaU8PxL7WF4xT17O6s1sXQ5sL' +
-  'mEam1mfU2m+PfiDL8XWmuNW8L6jrdun2ae4OnyRliOoUGcgrnkEsD7DpXt3hrx38aPDurS3PjvXdGuLK' +
-  '7iU2EOlo6vARwyvuZgcjoQeOeD1r5Y8M/tQfsyXvj+TxcdDWGzncmSVon3JIfmwSBgH/AAr1f/hq7wJ4' +
-  'pEWmfC3w3cXYK4FwYWwp47kZP4V+mVpOa5k9z9LeY0a2HjGMUrLpfX8T6T8LXg8TX6afpQaB7gndNH94' +
-  'E/xD3H9K+MP+CgPxD07Sv2oPEHwk8UX2qa29haaa9mt9cM6Wwa1icqhYkfM5LnGMlvavuD9mvw3LpGjr' +
-  'r3iG4L3cgUsRgAD+4oPr6+nT1HPft6fsofs6fGfSIPij478daR4S8T2ll9mt5ry58s6tErFliwgLl1LN' +
-  'tZVbhsNxgrwZngcRmGXyo0IOUnZqK3dtbL87dbHzOdKtUwcpJ6LV62PiCz/aTv7G0isotCKrDGqKvlLw' +
-  'AMf3qK3Y/wBh/wAAXMa3D6rrJaRQxK6mACTzxRXwD4Pztv8A5F2I/wDBNT/I+C9vhr/GfA+hqo8WoQo4' +
-  'bjjpzXVePpphpsiiVsZXjdRRX0GK/wB4R9HjPiid3+zPaWtx8KtaS4to5FOvWZIdAQTsl9fqfzr6p/Zu' +
-  'tbWG+t1hto0AOQFQDnNFFfSYL+AvV/me9gf4C9WfZ/gOWRdKlkWRgywuVYHkYU4xX54y+JfEfifx/rWt' +
-  'eJdfvdRvFvJUW7vrp5pQqyYUBnJOAOAM8UUV+icD/wDIxl6Hm8Uf7kj0K0dzaxEuf9Wvf2ooor9gWx+Z' +
-  'dT//2Q==';
-
-var ib_icon_url = 'data:image/png;base64,' +
-  'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAC' +
-  '9AAAAvQBgK2sVQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABzCSURBVHic5Zt5' +
-  'lFXF1fZ/dc65c8/QI3Q3Q9MNNINMigIKiERNUDQYjWMwxjfLKZo4JfGLcYrRT6PGaIzmRaMmryZRHAIa' +
-  'FaLgAKLI0A3SDNLQdNPzdMczVH1/nHtv32aIZv7WemutWqfq3nPq1vPsXbt27bOvUErxv7lo/+kJ/KeL' +
-  '8e/8MTHvNr/XH6qWwi4RmlaqlCoVqFKhaaXKkf1CiGYlRIsQskU5Wosl7Ub1+g9a/qVz+lcvAXHWg3le' +
-  'K/GVMeUFF5aWDJlXMarMW16cS2FeEFMJPul12BgRzM7TmJyn0RexaOmJ0NLex4HmTvY37Pu0uSPynCa1' +
-  '5YnXrt/yT5/fv4IAMe82wxMMXFRRlH3ZjCmjZp4wvUorKcwBrxelQCmFAzzQpNFquc9Mz1ackS9RKKQC' +
-  'JRUSULbD/vZ+Nm7dy0cfbD/Q0xt+Xpc8HHvt5r3/lLn+swkILrpnyUlTRj68YP4xJaPLh4LHQEG6SkAp' +
-  'eK9PsLwr+ZCCEq/iimIJSiFTJCiFlO78pARbOuxu6WPDe3XOts27H+9xxI/UK9/r+Efm+08jwLPop3Mn' +
-  'Vg599KKzZo0bM6oUpWso4YJGgRTCJUGBg+KOAxq9dsYACrKE5MwCRbVfIqVyCUgRASgJUimUVPT09PHn' +
-  'NzYlNmzcfbdp6/epP18f+Xvm/Q8TIL72QKBAOk9f+rUTl5w4vQrd60lLG3BJUG6VSUKkgrqYYFm7yCBA' +
-  'gYKQgO+WWOgCpJTuc0kiUOBIUEoiFThS0tTcxSvLP+hsbGlbZL36/Q/+rQQEF901rCQ/982brlg0rnLY' +
-  'EEhJPIlLCoVSScmjXDBJUnbH4eE2PYU+vUYWZEtOzHLS0pdSulJXJLXBtQ8OSQ2RYJkWK1/72Fm3fvu3' +
-  'EitufvJvwfDFt8H6WgMoRYnRaM7IlfXlZRNGX3DD9ZefmpubHUQIBhGgFGhoKOGqLwiUUIgk1rAUoIs0' +
-  '/lTdnhBMCwiCunujEMJ9RihS3CpBehwE6B6D00+foQ8rK1iWe/a90/smx65Wt94q/3EC6mtDwDxgGooa' +
-  'BCYC39o9Jf67N12y6IdXnqb7/R40obkzEyCS4IUmkEqBEGi4JIjkjIWAXZY24IaljIVS9CqBnvw8NRYa' +
-  'CDlAbKqIjKvQBCPGj6akKXpFfP1HY8UZty1Sr9wa/fsIqK/NAU4G5qHUcAQKTQikCmxtzk/csm7pGddf' +
-  'errm9xhowgWU0oCUFihB8hGVRiKEqxF7EoK1cQ2VAqogKBTDDEW7CasiGqeHZHo8R7kkClJSd3/EVrC2' +
-  'E/aGNUb5JW0RSW/FBLx9cr7a9vHzQnCGUqgjYjwiAfW1XuBMFLMRjEJggNYClKNUrD0S7L3spXlnfefq' +
-  'L2s+j+GCTuFOEQCgCWwp2RSFTVHB9rjg28WKcq9rxFZEdJQmSCEq0hRnZzn02hD2wnF+B6lc8rbENFZ2' +
-  '61R7HWaGHIYYA0vB0BSzh8CYkKLQUGzXYVe3wF8zAae/9yviSz++B3584xcjoL42CFwJjEYwFgiD+CzZ' +
-  'jsYso/Unb004c8/os0N1YZ0TQ+5jPZYiIqEiKNCSDEigIa7xaIsCHdDgiU6dSUGoNwUHpYAkAYuCNrN9' +
-  'NgKwDcUDnR4MdMI2bI0KDiYApaiLadRFNM4fajLcMwBAB0p8Cke6Q6aWoX/CsUTDfdcHTr1tU+z1W393' +
-  'NAK0JHgNuBoYmawWQuwDlY1ShUrR8mpd2Wk7s44v9JWWMTp7YICVbZL79lg81+LQZiriSdOzI6qSGuEC' +
-  '7XBgVURw0EnOUHOroQn+J+ohqgSmEnQpjeV9Bm+GdQ7aYkCrko0cXXC0ErYFQ/zuvULX8U2eLZxA3jLf' +
-  'l++a8tcJgFOASgQhEEOBPQAokQeid/3egppevWhY3ohiNA0K/YL9McVv9jms7pD02/B6u+T3Bx10FDEJ' +
-  '7/ZlLj0xuJmqmmB5zGCHpfGHfoOf9frc/f5QjBn9tX0a+xODv1bJG6YWKIb4MsD5AvjGHedD8TshDhsV' +
-  'ACNp6U9PjpQHqgchnOTQhiNFbHt7wSyjdCgn6JvZEDuGW7bq9DpJKeoDM/Ro8HFY8VFY0W3z+YftpPMT' +
-  'k4J6qUHS7v01s1Uf0eiMw6xshxEB2B7RiFqKcj/Ud8HO3sEPazn5aIXlY/3zb74cfvqrQ8cTqm78scA3' +
-  'kv0xQBQhDiQnWLanIzhtdeuk4caQoQhNUJeo5vnwIoShJdUY0IVr1LTk3j6oTbqvMr9LaUH6kOB6OkIm' +
-  'vaVkH0cNtJOfC0ehS8WMbIetfRAxBcqWOKaDY0mk6eCYbl+ZFrKvi8Smtw9abUMq1EeXW4MIAiZk9G3A' +
-  'm+pETD2akN6yYF4oPc+JwZ1M9O8YcPIPldggP3jAw0Ml/QB5OKCUiyfS96rB43DI54ADrO/ViNguiyrj' +
-  'PpXxm0op8PrRCytK/Hl7fnioBmhA/oA+EAWyUt01uwondzhDtIpgWwYo+Frua8wPvY+mZPpzkfGj6Vlk' +
-  'fpb0ZQdIICldkpI/lLCBMa4qsji7wOacITZ+TWWAyyRIJYGrAeAMjKMVDUf586/VT74zK+MpNCCQwXIP' +
-  'kI1SHsdBawlnj25yKijw9jPCfzDtsmso5ofWcXn+c4zx7kWkJ56aGUcEkqnmh9YUKTkoCnU5SBtsBTUB' +
-  'yeiAYlGBk3STB/+OSmrRIBLcwIKrXZoOecW5Ptl1WSYBBoNtbgLoAoZtawkJ25Plizp+9kZKGJXVAkKx' +
-  'zxrmurrAcOMgl+S8SI/M5iNzEvVONR2qAKn0jAkKV8okPcJB15TGDEz6zDyLKq+kxxIs79FojsOBhCAv' +
-  '6N4y0q+YGJSsN0WabJUkT0n3qJwKurhaJ9NVC+YgjeBi4MFMApqA0gEORBOoSfu7Q1nCG0ApRUuigFxv' +
-  'lFJvJ0oImuwyd+JJFzdP62dB4D0WiPew8NAiizigSmiWJTSrItpUIVImff/UEeXQTSkpuYjjNrN1yQUF' +
-  'klYT/MiMta3INiAz2OACl2jtB/Ac2IXRvJuc/mYCVhjiEUQikrxGIdJz4sl5D+w0ExbxuHWSAXwGzMiY' +
-  'SVhKwjkhNa7Z9qUlszMyHCGaKPN2ENAt9tllmMp3GBAPFhV6MxWiOe0I2ULnoCzioCokQpC48hPHR0z4' +
-  'iCs/MeVe49LL7piXST6Jrix0ZVNu2ICNkDZC2QjlMMKJUvrORqL7dpF9cBd68y7sg01kFxZSMaaCmuoy' +
-  'KqcXEfQXYQiJR5N4hIMhHPbvOSAeemhflZRKAmMMYO8hsuBArzdekOV4C2IRumwDlIaUgh2Rckaqg5T6' +
-  'OsnX+2hximiRxThKGxBpaiNXqb7CUDbDtRaG03Jk6WdogU8oJtoqbcTSpiXZUwImZitWPvIQvniMBRct' +
-  '5tInfs7wkcMRjolKRFFmFJmIohIx92q67c0btvPLX77BlxZNo62lO77+/YYqDdgP9GfOo6E1qyBsBajK' +
-  'PohHWCgl0xP5LFbKZ/EylBCUedqY5N3OUKN7YJaDdoKMfsYWNvjzzGcgId3K4I8H9XVNkF01mrHHTub9' +
-  '19bws+/eRWvjPpQVR1mJjDrQX7NqI9+/+VkWnTOTC86fQ01VacDj0as1ausdYFAoKWYaWTt6hiKUZFxO' +
-  'E7pyBu3XBxMFbI6ModfOwitsRnv2Mcm/gxK9A13IvwJafYEKe+MZpiLTSGbwWj5uGBXVo/i/ry9D93k4' +
-  'b8pZ/Pahp3Hi0UNISPDS79/hnrtf4ILL5rNk8bEU5YcoKckTgYB3cspZfTctN4VwCGTFLA87+4rIMmLU' +
-  'ZDeBcgZhiNsetkdHsjNejiUNAiLO0OhnhOrWMMqzjywiAxP/ItLPEHe/DQ1RgemAlbmzZqjD2Np8dmzd' +
-  'xeTJNdzyyC1cde91vPjky1yy8Eq2baxPg//vR1/hqWVv8a1rTucrCyeTn+3u+iUleShFlXscrq3voL72' +
-  'U2Cc5aAbvmBQxAWd0QD7jXwqsrupCjWzK1ruYkjFpZSiw8yj28mlQLbx7LV/onl3P7f+xqB2ZDcR5afD' +
-  'KaBb5pBQGaeUIxoBNegSsaHOElT6JfmeQ1aYUlSPD7H8pztxEjFyg14Wf3Uexxwzit89+nuuvvBOTjtj' +
-  'JmY0xsaPd3LF9xYxa9ooAr6Bc3Qo5EMp5ck8rqwFsG10ie5192jF/v58uuJBinw9jA4eIB2dTFalFJal' +
-  'eOr7a2neEyPSH+f+a7cQ7kkQEnEqjWaO8X7KJO+nVGjNZIsIQsojqv6hWpKlK/I9h3CTZGJoaTZWPE7r' +
-  '3n0oM4GwTSpLcrn2+nO55f7/4tPtjWzfvo8rr1/EnBlVg8ADWJaDEMLOJGAL0GY76A66Jxl+RSnJzp4i' +
-  'YpZBsa+LsVl70ZR0HSwJylGs+ukKunZ2cNPjd+Lxejjl3LO554adtMTzsZUb+Q2IBKVGO+M9u5jqr6fp' +
-  '9fU0rtud9NaOsBQUBLQM9U+CT/HlD7qAIt09g4ydT3OYPX00d/zkQr5782KOnViJz6NzaHEcCWAOEFBb' +
-  'L4GXbAcNBbo24EVZUrC9u4yEbZBvhJmYvQcPJmbU5I07X2H/us945I2nGTaqAqUUV91xLSWFw3n67no2' +
-  'xsazIzGCDjsfOxkENHBY/dhHvHztczx1xi9498FVtG1vOcxQRmw37ueoDPApLdA1PH4f0d7ewyy+suIU' +
-  'BA3GjyrG0I98Jnc1AHNwTLC2flN49fhGXThWts9vdEcdhBAgBVFLZ3NXOTV5reR6YxT3bOGBm7cgbINf' +
-  'rnqWmsk1bPlwk7t/m1HufPxWLl14GZ88t4Fjzj2WHicHwXCCWpzehn30tvdRUDKUM5cuAeXwpx+9jPAI' +
-  'qk4ZR83CWrJLcolaiu29UJ2tknFQldYIFHhDIaL9/SgrgTQHSAj39NLc1ElHRx+xmEksZhKNJohG3XZ/' +
-  'JEHT/g5HSpU4LCr89kb1csFI55qgXw90hy2UEIhkWMuydeq7S4lu3cIf7t3AtJOO58dP3ktObhAZjyAT' +
-  'MVdK8Qh+XXL/sh/xzTO+S155ASOOH40SEHECvLEqwcQ5Mxl37AReeeoFlm95ictvvIRP3vmQPz3/Gs9/' +
-  'YxlFVcVUnTaR2oXj0YUYBN7VBIU3GOQvr67hw1Xr2L3nIPv3tdNxsINEOILm9UHOUKQ3iK17sTUfpubF' +
-  'xMDRc8lu3fdCMBz/7WEE3PCws+fKa/xdJ0wUOSiHpBuelIBrvffs18nKzeW+3z+EUA4yHkHZSS9MqXS/' +
-  'eGiIux/6DjdceT9nPvB1CkYWglC0vreNa276JpNPms7KJ57jmQee4tLrzueYY8cxecoovvfDi1j7+gc8' +
-  '99tVfLBsHRMuOpt5Xz0Bv8fCIIFBHEMkCA0v5/26Dg54y+gNTMGsLiIxtRAzOBTbCLrLwXSXBbaJkhZI' +
-  'E6QiJjuXtfe1/flI7wXiv1kT2jF3qneEcvpc6SNQyZYCxi8cy663d/KHR55myTcXu4PbFlhxhFKoeBjl' +
-  'WCjbYvy4Mq7+zlk89oMXOPvRi7BjFpHGfcw9cz6hoI+Tzl7AMw8+w5nnnkx+XgBlm3h1mL9wCvPmjWfz' +
-  'hu0sW7aaR55+kZEXXEX5oq8jvH6kI5lw93m09dqsWdeBssx0JaOtbAscG5QN0gbpIKQ0NTvaA0eO2iVa' +
-  'O2TTlt6JZAUMlJQgHZAOykm2leL4S2fyyzseo72x0VX/eASViLnH/lQ/HkHFwyxcUMvCk2p54/8sZ91L' +
-  'DUyaO4ucnCCasjl76RkopfjNQ79zteiQOrF2GD+751zuvW0x/g9/z9tLZrLnt49iRcOgFP0xC2Wabj0E' +
-  'PLblVmmhZCYJdi/QfUQCWhsbHG9/0/q/7CzF8o5wt8L0mXqAhMJRQxgxcwT3/+AXabDSzFgC8TAyHnbb' +
-  'ZpxvXTafkpCfPS+/x9Jrvw62CbbJmJGlHH/q8az84yoSkUhSasmabAPU1JTx0zuW8LO7z6HzpSdYe+4J' +
-  'dG7fypub2tPWH/NwLUiDT1VAT/Q0AH1H0wA8vbu3t7d19Lf5TyVuGUkSnAxNcK8zzpvGhve3sO6tdchE' +
-  'GGXFAXjz1ff4dMtOYv1h11nAfU02qbacsspSZs6dkQapK4dzLj6NRDTOW6++e5gGpMquXQd59NE/c9PN' +
-  'zxIJR1BS8T87fETDMXedm2aSiCR42wRloVQGeGmhEBjhlvdSGnC0l6NNDXV1m+JzJ83ZHZ/DVGMVAEqm' +
-  'zKBCofAFdKZ/fRr33vkMz/7ueoIemD23lpeWr6OluYvu7jCFhblUVAxlePkQVq/exo0P/fAwkONqhjF1' +
-  '9kRe+O2bnLpwEtgmna1dbKtrpK5uPxs27KKvL8aUGaO5+PJT2Lyxka3eCWhCoMy4u85tK6k1SbVXKclb' +
-  '6aqkjaZ7E/7OuvdaGxsScJT8gOLKan+ioObmk8+/7NZJY4fRuPFZjitvAqEBGkLX3LamodBZcdtKTpo+' +
-  'hqVL59MbjhNLWMQSFt09Efbt66CjrZetn+yltTXMioYVCGm5e3Z6747z3ppN/ODbDzB77kR2frqftvZe' +
-  'KiuLqBxVTE3tcMbXVlBUEMKraZx3wS+oX/IopjcbZduDCMBxpe1afBuBTUlpHl6Pzt5d+/FY0brsPSsu' +
-  'aW1s2HhUDWhtbIgXV1a/v/6T3ZEptcND3YE5HOhZzrC8uPv211GgKYRSCE0x59uzePW215k+bTRTp44c' +
-  'GKhiKMdOrCRu2jwt4aUX17N07iV84zvnM/vkaW4AI6kFUydVsnDxTPw+ncVTZjFyZDF5uQGyAj7ysv34' +
-  've5Un3l2LeHhx5DQg2Am0lZeWVbayClpkRXyMnLUMEqHF+Dxedn3WRNitxdPdO863CgYR9WApBaMCZfP' +
-  'f+ScC886xbJtVq9Zz3Un7SDXb7vSFxoIgdDc9v4tLbz/63U8/tjlFBXlHnHM9R/u5I7bXyCUH8Ln9XLh' +
-  't87glNOmYygbZSVoa+tAcyyygz4MXdDTE3UTJISbKGHZDt/45q+oO+4aonkjXHtku1ubUo67MJUkK+Th' +
-  'xPkTMHwGjqMwLYs1K97HNEU0p+HFi9v3bH7hixDgdTxZ5xUv+NYTQ4cEvR98vIeSXJtrT2og5JOuZySS' +
-  'oTChITTB5le307mllUd+file72DleuedbTzw0Aou/cnpjJ1Rwc5Pmnj3hToa6w5y1pI5LFo0Hb+R3G2A' +
-  '9vY+zj33AQB0XcdxnCPO87CiG+j+AEYwiObzI3wBYpYiagm0RF+Tr79jPZa5FwgDj//VHKHiyuppsbLj' +
-  'b58wZ97pGzY1IDSD8gKTa07cid+j0uBTyQEKjbcffZ/RQwu4+cYzAejvj/HwI69Tv6OJL103l1HjSxiS' +
-  '40XT3Nyh/q4of35uM9tX72T+SeNZcvZMcnODHDjQxUUXPcyQ0iKOPfl4fvj4XeDYJCIRrHgUMxrBjMYw' +
-  'Y1Gs5NWMxzFjcaxYDDORcPvxOHYigRk3MeMJTNPij39cR19fDOD4zyPAr4RxTs68b/+yselACARoBlVF' +
-  'ca6cvRuPAQO5MS4RVtxhxV2rufBrsyjIz+JnD61gwtzRHHvuMfQnHEAwrDBETsiD36unT3h79vfw4cv1' +
-  'fPpWAyfMrGbOrLHccMMz3P7SYzxx4z3kFeRy3x8eIC8/G5Wy+LYFjjm4b5tpL1TZ5sDu4FhYps1dd71A' +
-  '474OOjr6E5FwfO7nZokVV1ZPjhdO/X60cPy5WP1JoDrjy6L81wmfoWuH5McIQW9rmBV3vU0w188JS6dT' +
-  'XDV00KFKQxAKeRlZloOmJZMqlGLbnk4SEYtP397F1pWf0t8TZXXfZjau38ivb76PnrYu7nvuXkbXVEAG' +
-  'yDRY55C+bSXJMAn3x7jlluewpeS8pfP5+d3LIx0dfQu+CAEa8OX+kV++3/Jmj8GJJbHqTKnoZ+lx+5OZ' +
-  'GamEH9cudO3vJbc0G91jDCRKHBIK8/s8BP0Gfp9BZ0+MhJnKnFQ0b2tj5X3vsC5RjxWPsfmTep687RG2' +
-  'fbiV2x/7AbPmT8/QgsHAD9WMjvY+brrpWYpK8/nq12dTW1XCNy5+ONze3nfK56bLtzY2SODj0L63HjKU' +
-  '3S00b/JM6vBJY5CH366kP66BclIhIlAOBcOz0A33vpQbnfoudW88nqCrJ0Jzay+JhDnwnXRczxNQlonX' +
-  'EBwzsYpv334Fxy08nhsv+RHPP/4iyjkUvNsf0A6Lxr3tXHXVf1NVU8a5F89lUk0pAV967X6x/wu0NjY0' +
-  'a07ig6z9f3lM070JhJGOU+1s83PPGyP4rMM3iAA3r1UeAto5jKgjViSO5b7Gl0lwOg61Y4az9HsXsOiS' +
-  'r/Dz23/Nkw8+lwbqkjFAhLIt3l27jauv/m9mz5vAmeccz8SqYryGGx5LJXh94UTJ1saGjcWV1bmBlg9K' +
-  'omVzLlFmn6aSfn5P1MODq0ewZEoLc0Z3DdgEIUi/IUpnUSbbRwwMDyxHx3Q1QJommo4rWWlTVVHIeZd+' +
-  'mZwcP08/upxwbz9XXLs4aexcImwzzhO/eoPXXtvEeZecxPQZVVSVD0ETmT8q/jYCkuVdb8+eoDQCObGi' +
-  'aYsxIzrKXbeOFDz/cRmfdQY5b1ozXj2VOyAOtwGZb4UHETDQSGmALiQ4ziDJVpTksXjJiWRleXn6wReI' +
-  '9Ye59vqzENKio7WL23/8PNGYyZXXn8H4mjKGF+UcDY/6mwhobWywiiur/+LvqNf0RE9vpOzE85XS/coe' +
-  'yFr68LM8mnv8XHbCPoZmmQwK4h0G9OjFMR28AT9COUdc30V5QU5bOI2sgMGyB5cTDUf50sJJ/OSuPzJ1' +
-  'ehWnLJpGzYhCcrP8Rxzfth2A6N/8l5nWxoZocWX1W57+A1b23pXd0fJ5S21PsEBZsTSypm4/d71exYlV' +
-  'XSwY20G2zz76C9GjEWBLAtmhpFqbgwxbioy8kId5s2oI+L7Kkz9/lffW1nPexXOZOmM0YyqGpNf7kUos' +
-  'ZupA39/1n6HWxoZYcWX1m3qiN5K1e0VHtPzES82ssjHKjLlSAixbY9WnQ1m7q4C51Z2cXNNJyGt/zsgZ' +
-  'BJgOwayQa9zsjD3/ECsf9GjMmlJB8Htfoas7Qm1NGeXFeYjPIdw0bc/fTUCSBAdYW1xZ3R3at6rVm11+' +
-  'SrzomFNtf16+MiPutgeYlsYb2wpZs3MI86s7mF/Tid/z+X59woSsnKxBxm2ADDPD8lt4NZhWW04kZh5V' +
-  '5TOLZTk4jvz7NSCztDY21BVXVrd5+ve3ePr3f5LIrVqQKJw8y/ZmhbATbiRGKeKmxsq6It5uGMKCsR3M' +
-  'Gt1NyHd0jeiPQH5eKA184MyfSYaJctwxDF37QuABotEEhqGZH1iO80/521xrY0Mb8HpxZfVuX++u3b7e' +
-  'PWsSQ8fOM7MrJtmBoiE4jpZax1FT55UtxfxpaxFVRVEmD+9j0rA+8oOD0vcIR6E0V6fzYDteQ+DVwdDk' +
-  'YDKcL76kMks0mkA39Cj8lePw31uKK6t1oAaoBkYozTPKzB092coaVu2ESgql0HWlHDd8riQimXtQnJtg' +
-  'eH6CYflxyvPifLy8jtimLYPfiQOGoUvDozseQ7e9Xl16PIbyeg3l83lUVpZf5OeHjLy8kDc3N6jn5ATI' +
-  'zg4wcA2SkxOgubmb66576sA7kfjwf+n/Bosrq4txs09LgVKEKHT8BeXSEyqWRihPegI5Sg8GpeH3CWU7' +
-  'worHNDsSFna0RzcjnVqip8ljRjp0x4p4LLPfH491BWKRsCYdP5B9hJqTamualqfrIhfIUYosKWVISpV+' +
-  'Rez3e7asjZmT/+V/nEwSIXATMsuAAiAXCAJ+wMOAS24laxQ3YNEFtAEHWxsbTP7BMkMIDwNkiQ1K7f23' +
-  'EHCkkiTFwE231knmjgJ28gD2byn/MQL+fyn/6/89/v8AG+f1CR8WcKcAAAAASUVORK5CYII=';
-
-var fake = {
-  load: function f_load() {
-    if (!Cc["@mozilla.org/process/environment;1"]
-           .getService(Ci.nsIEnvironment)
-           .get("FAKE"))
-      return;
-
-    dump("Fake load\n");
-    setTimeout(function() {
-      fake.fakeIt();
-    }, 1000);
-  },
-
-  fakeIt: function f_fakeIt() {
-    // First delete all existing accounts
-    // this will prompt the user for a confirmation before deleting
-    this.deleteAccounts();
-
-    // ensure the account manager is opened as our fake accounts will
-    // be visible only in already opened account manager windows
-    menus.accounts();
-
-    this.accounts = [new Account("Tom", "prpl-aim"),
-                     new Account("tom.smith@hotmail.com", "prpl-msn"),
-                     new Account("tom.smith@gmail.com/instantbird",
-                                 "prpl-jabber"),
-                     new Account("tom.smith@yahoo.com", "prpl-yahoo"),
-                     new Account("tom@irc.mozilla.org", "prpl-irc")];
-    for (let account of this.accounts)
-      Services.obs.notifyObservers(account, "account-added");
-
-    var win = Cc["@mozilla.org/appshell/window-mediator;1"]
-                       .getService(Ci.nsIWindowMediator)
-                       .getMostRecentWindow("Messenger:accountWizard");
-    if (win)
-      win.close();
-
-    this.groups = [
-      "Contacts",
-      "Friends",
-      "Colleagues"
-    ].map(name => Services.tags.createTag(name));
-
-    this.buddies = [
-      new AccountBuddy("Michael", this.accounts[2], this.groups[0], {_statusType: idle, _statusText: "I'm currently away from the computer."}),
-      new AccountBuddy("Ethan", this.accounts[2], this.groups[0]),
-      new AccountBuddy("Daniel", this.accounts[1], this.groups[0]),
-      new AccountBuddy("Emily", this.accounts[0], this.groups[1], {_statusType: away, _statusText: "out for lunch"}),
-      new AccountBuddy("Christopher", this.accounts[0], this.groups[1]),
-      new AccountBuddy("Anthony", this.accounts[0], this.groups[1], {_statusType: mobile}),
-      new AccountBuddy("Florian", this.accounts[2], this.groups[1], {_buddyIconFileName: flo_img_url}),
-      new AccountBuddy("Emma", this.accounts[1], this.groups[1]),
-      new AccountBuddy("Tony", this.accounts[1], this.groups[1], {_statusText: "Try Instantbird!"}),
-      new AccountBuddy("Andrew", this.accounts[3], this.groups[1]),
-      new AccountBuddy("Olivia", this.accounts[3], this.groups[1]),
-      new AccountBuddy("Elizabeth", this.accounts[1], this.groups[2]),
-      new AccountBuddy("William", this.accounts[2], this.groups[2])
-    ];
-    for (let buddy of this.buddies)
-      Services.contacts.accountBuddyAdded(buddy);
-
-    this.convs = [
-      new Conversation("Florian", this.accounts[2], this.buddies[6]),
-      new Chat("#instantbird", this.accounts[4], "Tom"),
-      new Conversation("William", this.accounts[2], this.buddies[13]),
-      new Conversation("Emma", this.accounts[2], this.buddies[7])
-    ];
-
-    let makeDate = function(aDateString) {
-      let array = aDateString.split(":");
-      let now = new Date();
-      // Use a date on day in the future so that time bubbles doesn't
-      // show the latest message as several hours old.
-      // FIXME: this will break when run the last day of the month.
-      return (new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1,
-                       array[0], array[1], array[2])) / 1000;
-    };
-
-    let chat = this.convs[1];
-    chat._topic = "Ask questions about Instantbird here.";
-    chat._participants["Andrew"] = new ChatBuddy("Andrew");
-    chat._participants["Daniel"] = new ChatBuddy("Daniel");
-    chat._participants["Emma"] = new ChatBuddy("Emma");
-    chat._participants["Florian"] = new ChatBuddy("Florian", {op: true});
-    chat._participants["Tom"] = new ChatBuddy("Tom");
-    chat._participants["Tony"] = new ChatBuddy("Tony");
-
-    new Message("Florian", "Hey! :)",
-                {time: makeDate("10:42:22"), incoming: true, conversation: this.convs[0]});
-    new Message("Florian", "What's up?",
-                {time: makeDate("10:42:25"), incoming: true, conversation: this.convs[0]});
-    new Message("Tom", "I'm trying Instantbird! :D",
-                {time: makeDate("10:43:01"), outgoing: true, conversation: this.convs[0]});
-    new Message("system", "Flo has gone away.",
-                {time: makeDate("10:43:06"), system: true, conversation: this.convs[0]});
-    new Message("system", "Flo has become idle.",
-                {time: makeDate("10:48:10"), system: true, conversation: this.convs[0]});
-    new Message("system", "Flo is no longer idle.",
-                {time: makeDate("10:55:26"), system: true, conversation: this.convs[0]});
-    new Message("system", "Flo is no longer away.",
-                {time: makeDate("10:56:02"), system: true, conversation: this.convs[0]});
-    new Message("Florian", "So, what do you think?",
-                {time: makeDate("10:42:25"), incoming: true, conversation: this.convs[0]});
-    new Message("Tom", "Instantbird is great!",
-                {time: makeDate("10:43:52"), outgoing: true, conversation: this.convs[0]});
-    new Message("Tom", "I love it! <3",
-                {time: makeDate("10:44:01"), outgoing: true, conversation: this.convs[0]});
-    new Message("Florian", "Thanks :)",
-                {time: makeDate("10:44:12"), incoming: true, conversation: this.convs[0]});
-
-    new Message("William", "Hi!",
-                {time: makeDate("10:43:05"), incoming: true, conversation: this.convs[2]});
-
-    new Message("system", "The topic for " + chat.name + " is: " + chat.topic,
-                {time: makeDate("10:43:06"), system: true, conversation: chat});
-    new Message("Tom", "Hi! ^^",
-                {time: makeDate("10:43:32"), outgoing: true, conversation: chat});
-    new Message("Andrew", "Instantbird is great!",
-                {time: makeDate("10:43:52"), incoming: true, conversation: chat});
-    new Message("Daniel", "Sure! I love it! <3",
-                {time: makeDate("10:44:01"), incoming: true, conversation: chat});
-    new Message("Florian", "Thanks :)",
-                {time: makeDate("10:44:12"), incoming: true, conversation: chat});
-
-    Services.core.globalUserStatus.displayName = "Tom Smith";
-    // Ugly :-(
-    document.getElementById("userIcon").src = ib_icon_url;
-  },
-  deleteAccounts: function f_deleteAccounts() {
-    if (!Services.accounts.getAccounts().hasMoreElements())
-      return;
-
-    var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
-                    .getService(Ci.nsIPromptService);
-    if (!prompts.confirm(window, "Are you sure you want to delete all accounts?",
-                         "You are about to delete your accounts. Are you sure?"))
-      throw "user aborted the operation";
-
-    for (let acc of getIter(Services.accounts.getAccounts()))
-      Services.accounts.deleteAccount(acc.id);
-  }
-};
-
-this.addEventListener("load", fake.load);
-
-var gLastAccountId = 0;
-function Account(aName, aProto)
-{
-  this.name = aName;
-  this.protocol = Services.core.getProtocolById(aProto);
-  this.id = "account" + (++gLastAccountId);
-  this.numericId = gLastAccountId;
-
-  dump("account " + aName + " created\n");
-}
-Account.prototype = {
-  __proto__: ClassInfo("imIAccount", "generic account object"),
-  get imAccount() { return this; },
-  protocol: null,
-  password: "",
-  autoLogin: true,
-  alias: "",
-  proxyInfo: null,
-  connectionStageMsg: "",
-  connectionErrorReason: -1,
-  timeOfNextReconnect: 0,
-  timeOfLastConnect: new Date(),
-  connectionErrorMessage: "",
-  disconnecting: false,
-  disconnected: false,
-  connected: true,
-  connecting: false,
-  normalize: aStr => aStr
-
-  //FIXME: PurpleConnectionFlags
-};
-
-function AccountBuddy(aName, aAccount, aTag, aObject)
-{
-  this._init(aAccount, null, aTag, aName);
-  if (aObject)
-    for (let i in aObject)
-      this[i] = aObject[i];
-}
-AccountBuddy.prototype = {
-  __proto__: GenericAccountBuddyPrototype,
-  _statusType: Ci.imIStatusInfo.STATUS_AVAILABLE
-};
-
-function Conversation(aName, aAccount, aBuddy)
-{
-  this.buddy = aBuddy;
-  this._init(aAccount, aName);
-  dump("private conversation " + aName + " created\n");
-}
-Conversation.prototype = GenericConvIMPrototype;
-
-function Chat(aName, aAccount, aChatNick)
-{
-  this._init(aAccount, aName, aChatNick);
-  dump("chat conversation " + aName + " created\n");
-}
-Chat.prototype = GenericConvChatPrototype;
-
-function ChatBuddy(aName, aObject)
-{
-  this._name = aName;
-  if (aObject)
-    for (let i in aObject)
-      this[i] = aObject[i];
-}
-ChatBuddy.prototype = GenericConvChatBuddyPrototype;
deleted file mode 100644
--- a/im/content/debug/fake/fake.xul
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<overlay id="fake"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://fake/content/fake.js"/>
-</overlay>
deleted file mode 100644
--- a/im/content/debug/viewselectionsource.xul
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<overlay id="viewselectionsource"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <keyset id="conversationsKeys">
-    <key id="key_viewselectionsource" key="u" modifiers="accel"
-         oncommand="
-  var win = getBrowser().contentWindow;
-  var selection = win.getSelection();
-  if (!selection.isCollapsed)
-    window.openDialog('chrome://global/content/viewPartialSource.xul',
-                      '_blank', 'scrollbars,resizable,chrome,dialog=no',
-                      null, 'charset=' + win.document.characterSet,
-                      selection, 'selection');
-         "/>
-  </keyset>
-</overlay>
deleted file mode 100644
--- a/im/content/debugLog.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="UTF-8">
-    <link href="chrome://instantbird/skin/debugLog.css" rel="stylesheet" type="text/css">
-  </head>
-  <body>
-  </body>
-</html>
deleted file mode 100644
--- a/im/content/debugLogPanel.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<bindings id="debugLogPanelBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="debugLogPanel">
-    <resources>
-      <stylesheet src="chrome://instantbird/skin/debugLogPanel.css"/>
-    </resources>
-
-    <content flex="1">
-      <xul:vbox flex="1">
-        <xul:toolbar class="debugLogTab-toolbar">
-          <xul:menulist class="accountList" anonid="accountList" flex="1"
-                        onselect="document.getBindingParent(this).onAccountSelect()"/>
-          <xul:toolbarbutton class="debugLogTab-button" anonid="refreshButton"
-                             label="Refresh"
-                             oncommand="document.getBindingParent(this).showDebugLog();"/>
-          <xul:toolbarbutton class="debugLogTab-button" anonid="copyButton"
-                             label="Copy"
-                             oncommand="document.getBindingParent(this).copyDebugLog()"/>
-        </xul:toolbar>
-        <xul:browser anonid="debugLogBrowser" disablehistory="true" type="content"
-                     flex="1" src="chrome://instantbird/content/debugLog.html"/>
-        <xul:findbar anonid="findbar"/>
-      </xul:vbox>
-    </content>
-
-    <implementation>
-      <property name="browser" readonly="true">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "debugLogBrowser");
-        </getter>
-      </property>
-
-      <property name="findbar" readonly="true">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "findbar");
-        </getter>
-      </property>
-
-      <property name="accountList" readonly="true">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "accountList");
-        </getter>
-      </property>
-
-      <!-- Only show the debug log if the account list is already populated. This
-           is useful, for example, if we are importing into a new window and only
-           need to repopulate the account list without re-displaying the log. -->
-      <method name="onAccountSelect">
-        <body>
-        <![CDATA[
-          if (this._accountListInited)
-            this.showDebugLog();
-        ]]>
-        </body>
-      </method>
-
-      <!-- This method populates the list of accounts and ensures the specified
-           account is selected. Since the _inited flag is set here before returning,
-           no debug log will be shown. -->
-      <method name="initAccountList">
-        <parameter name="aAccountId"/>
-        <body>
-        <![CDATA[
-          if (!("Services" in window))
-            ChromeUtils.import("resource:///modules/imServices.jsm");
-          let accounts = Services.accounts.getAccounts();
-          while (accounts.hasMoreElements()) {
-            let acc = accounts.getNext();
-            var proto = acc.protocol;
-            var item = this.accountList.appendItem(acc.name, acc.id, proto.name);
-            item.setAttribute("image", proto.iconBaseURI + "icon.png");
-            item.setAttribute("class", "menuitem-iconic");
-            let accId = acc.id;
-            item.accountId = accId;
-            if (accId == aAccountId)
-              this.accountList.selectedItem = item;
-          }
-          this._accountListInited = true;
-          this.findbar.browser = this.browser;
-        ]]>
-        </body>
-      </method>
-
-      <method name="copyDebugLog">
-        <body>
-        <![CDATA[
-          Cc["@mozilla.org/widget/clipboardhelper;1"]
-            .getService(Ci.nsIClipboardHelper)
-            .copyString(this.browser.contentDocument.body.textContent);
-        ]]>
-        </body>
-      </method>
-
-      <method name="showDebugLog">
-        <body>
-        <![CDATA[
-          let accId = this.accountList.selectedItem.accountId;
-          let account = Services.accounts.getAccountById(accId);
-          this.tab.setAttribute("label", "Debug log for " + account.name);
-          let doc = this.browser.contentDocument;
-          let table = doc.createElement("table");
-          table.style = "width: 100%";
-          // Clear out any existing content before appending the table.
-          doc.body.innerHTML = "";
-          doc.body.appendChild(table);
-          for (let dbgMsg of account.getDebugMessages()) {
-            let m = dbgMsg.message;
-            let time = new Date(m.timeStamp);
-            const dateTimeFormatter = new Services.intl.DateTimeFormat(undefined, {
-              dateStyle: "short", timeStyle: "long"
-            });
-            time = dateTimeFormatter.format(time);
-            let level = dbgMsg.logLevel;
-            let rowClass = "default";
-            let formattedMsg;
-            if (!level)
-              formattedMsg = "(" + m.errorMessage + ")";
-            else {
-              if (level == dbgMsg.LEVEL_ERROR) {
-                level = "ERROR";
-                rowClass = "error";
-              }
-              else if (level == dbgMsg.LEVEL_WARNING) {
-                level = "WARN.";
-                rowClass = "warn";
-              }
-              else if (level == dbgMsg.LEVEL_LOG) {
-                level = "LOG  ";
-                rowClass = "log";
-              }
-              else {
-                level = "DEBUG";
-                rowClass = "debug";
-              }
-              formattedMsg = level + " (@ " + m.sourceLine +
-                " " + m.sourceName + ":" + m.lineNumber + ")\n" +
-                m.errorMessage;
-            }
-            let tr = doc.createElement("tr");
-            tr.className = rowClass;
-            let timeCell = doc.createElement("td");
-            timeCell.className = "time";
-            let msgCell = doc.createElement("td");
-            msgCell.className = "msg";
-            // A trailing space after the timestamp a the trailing line break
-            // after the debug message are necessary to ensure correct formatting
-            // when text is selected/copied.
-            timeCell.textContent = "[" + time + "] ";
-            // Due to bug 116083, newlines that are forcibly displayed using
-            // `white-space: pre;` are not preserved when the text is copied.
-            // To work around this, we split the message into lines, and append a
-            // text node and a <br/> element for each line.
-            // The <br/> elements are not perfect substitutes for the newline
-            // characters, however. copyDebugLog uses document.body.textContent
-            // to get the entire contents of the debug log, and textContent does
-            // not account for <br/> elements.
-            // So, we keep the newline characters (which are hidden because white-
-            // space is collapsed by default in html), as well as the <br/> elements
-            // to ensure text is correctly displayed as well as copied.
-            let lines = formattedMsg.split("\n");
-            for (let line of lines) {
-              let textNode = doc.createTextNode(line + "\n");
-              let brNode = doc.createElement("br");
-              msgCell.appendChild(textNode);
-              msgCell.appendChild(brNode);
-            }
-            tr.appendChild(timeCell);
-            tr.appendChild(msgCell);
-            table.appendChild(tr);
-          }
-          // Ensure the scroll position is reset.
-          doc.body.scrollTop = 0;
-          doc.body.scrollLeft = 0;
-        ]]>
-        </body>
-      </method>
-
-      <method name="finishImport">
-        <parameter name="aDebugLogPanel"/>
-        <body>
-        <![CDATA[
-          this.browser.swapDocShells(aDebugLogPanel.browser);
-          this.initAccountList(aDebugLogPanel.accountList.selectedItem.accountId);
-          this.tab.setAttribute("label", aDebugLogPanel.tab.getAttribute("label"));
-        ]]>
-        </body>
-      </method>
-    </implementation>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/engineManager.js
+++ /dev/null
@@ -1,478 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var ENGINE_FLAVOR = "text/x-moz-search-engine";
-
-var gEngineView = null;
-
-var gEngineManagerDialog = {
-  init: function engineManager_init() {
-    gEngineView = new EngineView(new EngineStore());
-
-    var tree = document.getElementById("engineList");
-    tree.view = gEngineView;
-
-    var os = Cc["@mozilla.org/observer-service;1"].
-             getService(Ci.nsIObserverService);
-    os.addObserver(this, "browser-search-engine-modified");
-  },
-
-  observe: function engineManager_observe(aEngine, aTopic, aVerb) {
-    if (aTopic == "browser-search-engine-modified") {
-      aEngine.QueryInterface(Ci.nsISearchEngine)
-      switch (aVerb) {
-      case "engine-added":
-        gEngineView._engineStore.addEngine(aEngine);
-        gEngineView.rowCountChanged(gEngineView.lastIndex, 1);
-        break;
-      case "engine-changed":
-        gEngineView._engineStore.reloadIcons();
-        break;
-      case "engine-removed":
-      case "engine-current":
-        // Not relevant
-        return;
-      }
-      gEngineView.invalidate();
-    }
-  },
-
-  onOK: function engineManager_onOK() {
-    // Remove the observer
-    var os = Cc["@mozilla.org/observer-service;1"].
-             getService(Ci.nsIObserverService);
-    os.removeObserver(this, "browser-search-engine-modified");
-
-    // Commit the changes
-    gEngineView._engineStore.commit();
-  },
-
-  onCancel: function engineManager_onCancel() {
-    // Remove the observer
-    var os = Cc["@mozilla.org/observer-service;1"].
-             getService(Ci.nsIObserverService);
-    os.removeObserver(this, "browser-search-engine-modified");
-  },
-
-  onRestoreDefaults: function engineManager_onRestoreDefaults() {
-    var num = gEngineView._engineStore.restoreDefaultEngines();
-    gEngineView.rowCountChanged(0, num);
-    gEngineView.invalidate();
-  },
-
-  showRestoreDefaults: function engineManager_showRestoreDefaults(val) {
-    document.documentElement.getButton("extra2").disabled = !val;
-  },
-
-  loadAddEngines: function engineManager_loadAddEngines() {
-    this.onOK();
-
-    var formatter = Cc["@mozilla.org/toolkit/URLFormatterService;1"].getService(Ci.nsIURLFormatter);
-    var url = formatter.formatURLPref("browser.search.searchEnginesURL");
-
-    var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
-    Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-      .getService(Ci.nsIExternalProtocolService)
-      .loadURI(ios.newURI(url), window);
-
-    window.close();
-  },
-
-  remove: function engineManager_remove() {
-    gEngineView._engineStore.removeEngine(gEngineView.selectedEngine);
-    var index = gEngineView.selectedIndex;
-    gEngineView.rowCountChanged(index, -1);
-    gEngineView.invalidate();
-    gEngineView.selection.select(Math.min(index, gEngineView.lastIndex));
-    gEngineView.ensureRowIsVisible(Math.min(index, gEngineView.lastIndex));
-    document.getElementById("engineList").focus();
-  },
-
-  /**
-   * Moves the selected engine either up or down in the engine list
-   * @param aDir
-   *        -1 to move the selected engine down, +1 to move it up.
-   */
-  bump: function engineManager_move(aDir) {
-    var selectedEngine = gEngineView.selectedEngine;
-    var newIndex = gEngineView.selectedIndex - aDir;
-
-    gEngineView._engineStore.moveEngine(selectedEngine, newIndex);
-
-    gEngineView.invalidate();
-    gEngineView.selection.select(newIndex);
-    gEngineView.ensureRowIsVisible(newIndex);
-    this.showRestoreDefaults(true);
-    document.getElementById("engineList").focus();
-  },
-
-  onSelect: function engineManager_onSelect() {
-    // buttons only work if an engine is selected and it's not the last engine
-    var disableButtons = (gEngineView.selectedIndex == -1) ||
-                         (gEngineView.lastIndex == 0);
-    var lastSelected = (gEngineView.selectedIndex == gEngineView.lastIndex);
-    var firstSelected = (gEngineView.selectedIndex == 0);
-    var noSelection = (gEngineView.selectedIndex == -1);
-
-    document.getElementById("cmd_remove").setAttribute("disabled",
-                                                       disableButtons);
-
-    document.getElementById("cmd_moveup").setAttribute("disabled",
-                                            disableButtons || firstSelected);
-
-    document.getElementById("cmd_movedown").setAttribute("disabled",
-                                             disableButtons || lastSelected);
-  }
-};
-
-var gDragObserver = {
-  onDragStart: function (aEvent, aXferData, aDragAction) {
-    var selectedIndex = gEngineView.selectedIndex;
-    if (selectedIndex == -1)
-      return;
-
-    aXferData.data = new TransferData();
-    aXferData.data.addDataForFlavour(ENGINE_FLAVOR, selectedIndex.toString());
-
-    aDragAction.action = Ci.nsIDragService.DRAGDROP_ACTION_MOVE;
-  },
-  onDrop: function (aEvent, aXferData, aDragSession) { },
-  onDragExit: function (aEvent, aDragSession) { },
-  onDragOver: function (aEvent, aFlavour, aDragSession) { },
-  getSupportedFlavours: function() { return null; }
-};
-
-// "Operation" objects
-function EngineMoveOp(aEngineClone, aNewIndex) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineMoveOp!");
-  this._engine = aEngineClone.originalEngine;
-  this._newIndex = aNewIndex;
-}
-EngineMoveOp.prototype = {
-  _engine: null,
-  _newIndex: null,
-  commit: function EMO_commit() {
-    var searchService = Cc["@mozilla.org/browser/search-service;1"].
-                        getService(Ci.nsIBrowserSearchService);
-    searchService.moveEngine(this._engine, this._newIndex);
-  }
-}
-
-function EngineRemoveOp(aEngineClone) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineRemoveOp!");
-  this._engine = aEngineClone.originalEngine;
-}
-EngineRemoveOp.prototype = {
-  _engine: null,
-  commit: function ERO_commit() {
-    var searchService = Cc["@mozilla.org/browser/search-service;1"].
-                        getService(Ci.nsIBrowserSearchService);
-    searchService.removeEngine(this._engine);
-  }
-}
-
-function EngineUnhideOp(aEngineClone, aNewIndex) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineUnhideOp!");
-  this._engine = aEngineClone.originalEngine;
-  this._newIndex = aNewIndex;
-}
-EngineUnhideOp.prototype = {
-  _engine: null,
-  _newIndex: null,
-  commit: function EUO_commit() {
-    this._engine.hidden = false;
-    var searchService = Cc["@mozilla.org/browser/search-service;1"].
-                        getService(Ci.nsIBrowserSearchService);
-    searchService.moveEngine(this._engine, this._newIndex);
-  }
-}
-
-function EngineChangeOp(aEngineClone, aProp, aValue) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineChangeOp!");
-
-  this._engine = aEngineClone.originalEngine;
-  this._prop = aProp;
-  this._newValue = aValue;
-}
-EngineChangeOp.prototype = {
-  _engine: null,
-  _prop: null,
-  _newValue: null,
-  commit: function ECO_commit() {
-    this._engine[this._prop] = this._newValue;
-  }
-}
-
-function EngineStore() {
-  var searchService = Cc["@mozilla.org/browser/search-service;1"].
-                      getService(Ci.nsIBrowserSearchService);
-  this._engines = searchService.getVisibleEngines({}).map(this._cloneEngine);
-  this._defaultEngines = searchService.getDefaultEngines({}).map(this._cloneEngine);
-
-  this._ops = [];
-
-  // check if we need to disable the restore defaults button
-  var someHidden = this._defaultEngines.some(function (e) {return e.hidden;});
-  gEngineManagerDialog.showRestoreDefaults(someHidden);
-}
-EngineStore.prototype = {
-  _engines: null,
-  _defaultEngines: null,
-  _ops: null,
-
-  get engines() {
-    return this._engines;
-  },
-  set engines(val) {
-    this._engines = val;
-    return val;
-  },
-
-  _getIndexForEngine: function ES_getIndexForEngine(aEngine) {
-    return this._engines.indexOf(aEngine);
-  },
-
-  _getEngineByName: function ES_getEngineByName(aName) {
-    for (var engine of this._engines)
-      if (engine.name == aName)
-        return engine;
-
-    return null;
-  },
-
-  _cloneEngine: function ES_cloneObj(aEngine) {
-    var newO=[];
-    for (var i in aEngine)
-      newO[i] = aEngine[i];
-    newO.originalEngine = aEngine;
-    return newO;
-  },
-
-  // Callback for Array's some(). A thisObj must be passed to some()
-  _isSameEngine: function ES_isSameEngine(aEngineClone) {
-    return aEngineClone.originalEngine == this.originalEngine;
-  },
-
-  commit: function ES_commit() {
-    var searchService = Cc["@mozilla.org/browser/search-service;1"].
-                        getService(Ci.nsIBrowserSearchService);
-    var currentEngine = this._cloneEngine(searchService.currentEngine);
-    for (var i = 0; i < this._ops.length; i++)
-      this._ops[i].commit();
-
-    // Restore currentEngine if it is a default engine that is still visible.
-    // Needed if the user deletes currentEngine and then restores it.
-    if (this._defaultEngines.some(this._isSameEngine, currentEngine) &&
-        !currentEngine.originalEngine.hidden)
-      searchService.currentEngine = currentEngine.originalEngine;
-  },
-
-  addEngine: function ES_addEngine(aEngine) {
-    this._engines.push(this._cloneEngine(aEngine));
-  },
-
-  moveEngine: function ES_moveEngine(aEngine, aNewIndex) {
-    if (aNewIndex < 0 || aNewIndex > this._engines.length - 1)
-      throw new Error("ES_moveEngine: invalid aNewIndex!");
-    var index = this._getIndexForEngine(aEngine);
-    if (index == -1)
-      throw new Error("ES_moveEngine: invalid engine?");
-
-    if (index == aNewIndex)
-      return; // nothing to do
-
-    // Move the engine in our internal store
-    var removedEngine = this._engines.splice(index, 1)[0];
-    this._engines.splice(aNewIndex, 0, removedEngine);
-
-    this._ops.push(new EngineMoveOp(aEngine, aNewIndex));
-  },
-
-  removeEngine: function ES_removeEngine(aEngine) {
-    var index = this._getIndexForEngine(aEngine);
-    if (index == -1)
-      throw new Error("invalid engine?");
-
-    this._engines.splice(index, 1);
-    this._ops.push(new EngineRemoveOp(aEngine));
-    if (this._defaultEngines.some(this._isSameEngine, aEngine))
-      gEngineManagerDialog.showRestoreDefaults(true);
-  },
-
-  restoreDefaultEngines: function ES_restoreDefaultEngines() {
-    var added = 0;
-
-    for (var i = 0; i < this._defaultEngines.length; ++i) {
-      var e = this._defaultEngines[i];
-
-      // If the engine is already in the list, just move it.
-      if (this._engines.some(this._isSameEngine, e)) {
-        this.moveEngine(this._getEngineByName(e.name), i);
-      } else {
-        // Otherwise, add it back to our internal store
-        this._engines.splice(i, 0, e);
-        this._ops.push(new EngineUnhideOp(e, i));
-        added++;
-      }
-    }
-    gEngineManagerDialog.showRestoreDefaults(false);
-    return added;
-  },
-
-  changeEngine: function ES_changeEngine(aEngine, aProp, aNewValue) {
-    var index = this._getIndexForEngine(aEngine);
-    if (index == -1)
-      throw new Error("invalid engine?");
-
-    this._engines[index][aProp] = aNewValue;
-    this._ops.push(new EngineChangeOp(aEngine, aProp, aNewValue));
-  },
-
-  reloadIcons: function ES_reloadIcons() {
-    this._engines.forEach(function (e) {
-      e.uri = e.originalEngine.uri;
-    });
-  }
-}
-
-function EngineView(aEngineStore) {
-  this._engineStore = aEngineStore;
-}
-EngineView.prototype = {
-  _engineStore: null,
-  tree: null,
-
-  get lastIndex() {
-    return this.rowCount - 1;
-  },
-  get selectedIndex() {
-    var seln = this.selection;
-    if (seln.getRangeCount() > 0) {
-      var min = { };
-      seln.getRangeAt(0, min, { });
-      return min.value;
-    }
-    return -1;
-  },
-  get selectedEngine() {
-    return this._engineStore.engines[this.selectedIndex];
-  },
-
-  // Helpers
-  rowCountChanged: function (index, count) {
-    this.tree.rowCountChanged(index, count);
-  },
-
-  invalidate: function () {
-    this.tree.invalidate();
-  },
-
-  ensureRowIsVisible: function (index) {
-    this.tree.ensureRowIsVisible(index);
-  },
-
-  getSourceIndexFromDrag: function () {
-    var dragService = Cc["@mozilla.org/widget/dragservice;1"]
-                      .getService(Ci.nsIDragService);
-    var dragSession = dragService.getCurrentSession();
-    var transfer = Cc["@mozilla.org/widget/transferable;1"].
-                   createInstance(Ci.nsITransferable);
-
-    transfer.addDataFlavor(ENGINE_FLAVOR);
-    dragSession.getData(transfer, 0);
-
-    var dataObj = {};
-    var len = {};
-    var sourceIndex = -1;
-    try {
-      transfer.getAnyTransferData({}, dataObj, len);
-    } catch (ex) {}
-
-    if (dataObj.value) {
-      sourceIndex = dataObj.value.QueryInterface(Ci.nsISupportsString).data;
-      sourceIndex = parseInt(sourceIndex.substring(0, len.value));
-    }
-
-    return sourceIndex;
-  },
-
-  // nsITreeView
-  get rowCount() {
-    return this._engineStore.engines.length;
-  },
-
-  getImageSrc: function(index, column) {
-    if (column.id == "engineName" && this._engineStore.engines[index].iconURI)
-      return this._engineStore.engines[index].iconURI.spec;
-    return "";
-  },
-
-  getCellText: function(index, column) {
-    if (column.id == "engineName")
-      return this._engineStore.engines[index].name;
-    return "";
-  },
-
-  setTree: function(tree) {
-    this.tree = tree;
-  },
-
-  canDrop: function(targetIndex, orientation) {
-    var sourceIndex = this.getSourceIndexFromDrag();
-    return (sourceIndex != -1 &&
-            sourceIndex != targetIndex &&
-            sourceIndex != (targetIndex + orientation));
-  },
-
-  drop: function(dropIndex, orientation) {
-    var sourceIndex = this.getSourceIndexFromDrag();
-    var sourceEngine = this._engineStore.engines[sourceIndex];
-
-    if (dropIndex > sourceIndex) {
-      if (orientation == Ci.nsITreeView.DROP_BEFORE)
-        dropIndex--;
-    } else {
-      if (orientation == Ci.nsITreeView.DROP_AFTER)
-        dropIndex++;
-    }
-
-    this._engineStore.moveEngine(sourceEngine, dropIndex);
-    gEngineManagerDialog.showRestoreDefaults(true);
-
-    // Redraw, and adjust selection
-    this.invalidate();
-    this.selection.clearSelection();
-    this.selection.select(dropIndex);
-  },
-
-  selection: null,
-  getRowProperties: function(index, properties) { },
-  getCellProperties: function(index, column, properties) { },
-  getColumnProperties: function(column, properties) { },
-  isContainer: function(index) { return false; },
-  isContainerOpen: function(index) { return false; },
-  isContainerEmpty: function(index) { return false; },
-  isSeparator: function(index) { return false; },
-  isSorted: function(index) { return false; },
-  getParentIndex: function(index) { return -1; },
-  hasNextSibling: function(parentIndex, index) { return false; },
-  getLevel: function(index) { return 0; },
-  getProgressMode: function(index, column) { },
-  getCellValue: function(index, column) { },
-  toggleOpenState: function(index) { },
-  cycleHeader: function(column) { },
-  selectionChanged: function() { },
-  cycleCell: function(row, column) { },
-  isEditable: function(index, column) { return false; },
-  isSelectable: function(index, column) { return false; },
-  setCellValue: function(index, column, value) { },
-  setCellText: function(index, column, value) { },
-  performAction: function(action) { },
-  performActionOnRow: function(action, index) { },
-  performActionOnCell: function(action, index, column) { }
-};
deleted file mode 100644
--- a/im/content/engineManager.xul
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/"?>
-<?xml-stylesheet href="chrome://instantbird/skin/engineManager.css"?>
-
-<!DOCTYPE dialog SYSTEM "chrome://instantbird/locale/engineManager.dtd">
-
-<dialog id="engineManager"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        buttons="accept,cancel,extra2"
-        buttonlabelextra2="&restoreDefaults.label;"
-        buttonaccesskeyextra2="&restoreDefaults.accesskey;"
-        onload="gEngineManagerDialog.init();"
-        ondialogaccept="gEngineManagerDialog.onOK();"
-        ondialogcancel="gEngineManagerDialog.onCancel();"
-        ondialogextra2="gEngineManagerDialog.onRestoreDefaults();"
-        title="&engineManager.title;"
-        style="&engineManager.style;"
-        persist="screenX screenY"
-        windowtype="Browser:SearchManager">
-
-  <script type="application/javascript"
-          src="chrome://instantbird/content/engineManager.js"/>
-  <script type="application/javascript"
-          src="chrome://global/content/nsDragAndDrop.js"/>
-
-  <commandset id="engineManagerCommandSet">
-    <command id="cmd_remove"
-             oncommand="gEngineManagerDialog.remove();"
-             disabled="true"/>
-    <command id="cmd_moveup"
-             oncommand="gEngineManagerDialog.bump(1);"
-             disabled="true"/>
-    <command id="cmd_movedown"
-             oncommand="gEngineManagerDialog.bump(-1);"
-             disabled="true"/>
-  </commandset>
-
-  <keyset id="engineManagerKeyset">
-    <key id="delete" keycode="VK_DELETE" command="cmd_remove"/>
-  </keyset>
-
-  <stringbundleset id="engineManagerBundleset">
-    <stringbundle id="engineManagerBundle" src="chrome://instantbird/locale/engineManager.properties"/>
-  </stringbundleset>
-
-  <description>&engineManager.intro;</description>
-  <separator class="thin"/>
-  <hbox flex="1">
-    <tree id="engineList" flex="1" rows="10" hidecolumnpicker="true"
-          seltype="single" onselect="gEngineManagerDialog.onSelect();">
-      <treechildren id="engineChildren" flex="1"
-                    ondragstart="nsDragAndDrop.startDrag(event, gDragObserver);"/>
-      <treecols>
-        <treecol id="engineName" flex="4" label="&columnLabel.name;"/>
-      </treecols>
-    </tree>
-    <vbox>
-      <spacer flex="1"/>
-      <button id="up"
-              label="&up.label;"
-              accesskey="&up.accesskey;"
-              command="cmd_moveup"/>
-      <button id="dn"
-              label="&dn.label;"
-              accesskey="&dn.accesskey;"
-              command="cmd_movedown"/>
-      <spacer flex="1"/>
-      <button id="remove"
-              label="&remove.label;"
-              accesskey="&remove.accesskey;"
-              command="cmd_remove"/>
-    </vbox>
-  </hbox>
-  <hbox>
-    <label id="addEngines" class="text-link" value="&addEngine.label;"
-           onclick="if (event.button == 0) { gEngineManagerDialog.loadAddEngines(); }"/>
-    <spacer flex="1"/>
-  </hbox>
-</dialog>
deleted file mode 100644
--- a/im/content/extensions-discover.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-var defaultOpen = window.open;
-window.open = function(aUrl) {
-  let uri = Services.io.newURI(aUrl);
-
-  // http and https are the only schemes that are exposed even
-  // though we don't handle them internally.
-  if (!uri.schemeIs("http") && !uri.schemeIs("https"))
-    defaultOpen.apply(this, arguments);
-  else {
-    Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-      .getService(Ci.nsIExternalProtocolService).loadURI(uri);
-  }
-};
deleted file mode 100644
--- a/im/content/extensions-discover.xul
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://mozapps/skin/extensions/extensions.css"?>
-
-<!DOCTYPE page [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
-%brandDTD;
-<!ENTITY % extensionsDTD SYSTEM "chrome://mozapps/locale/extensions/extensions.dtd">
-%extensionsDTD;
-<!ENTITY % extensions-discoverDTD SYSTEM "chrome://instantbird/locale/extensions-discover.dtd">
-%extensions-discoverDTD;
-]>
-
-<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-      xmlns:xhtml="http://www.w3.org/1999/xhtml"
-      id="addons-page" style="padding: 0 0; margin: -1px;">
-
-  <script type="application/javascript"
-          src="chrome://instantbird/content/extensions-discover.js"/>
-
-  <!-- discover view -->
-  <box id="view-port-container" flex="1">
-    <vbox id="discover-error" align="center" pack="stretch" flex="1" class="alert-container">
-      <spacer class="alert-spacer-before"/>
-      <hbox>
-        <spacer class="discover-spacer-before"/>
-        <hbox class="alert" align="center">
-          <image class="discover-logo"/>
-          <vbox flex="1" align="stretch">
-            <label class="discover-title">&discover.title;</label>
-            <description class="discover-description">&extensions-discover.description;</description>
-            <description class="discover-footer">&extensions-discover.footer;</description>
-            <label id="addons-website-link" class="text-link"
-                   value="https://addons.instantbird.org/"
-                   href="https://addons.instantbird.org/"/>
-          </vbox>
-        </hbox>
-        <spacer class="discover-spacer-after"/>
-      </hbox>
-      <spacer class="alert-spacer-after"/>
-    </vbox>
-  </box>
-</page>
deleted file mode 100644
--- a/im/content/extensions.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
-ChromeUtils.import("resource://gre/modules/PluralForm.jsm");
-
-var addonsRegister = {
-  onload: function () {
-    Services.obs.addObserver(addonsRegister, "addon-install-disabled");
-    Services.obs.addObserver(addonsRegister, "addon-install-blocked");
-    Services.obs.addObserver(addonsRegister, "addon-install-failed");
-    Services.obs.addObserver(addonsRegister, "addon-install-complete");
-
-    window.addEventListener("unload", addonsRegister.onunload, {once: true});
-
-    let win = document.getElementById("dummychromebrowser").contentWindow;
-    let open = win.open;
-    win.open = function(aUrl) {
-      let uri = Services.io.newURI(aUrl);
-
-      // http and https are the only schemes that are exposed even
-      // though we don't handle them internally.
-      if (!uri.schemeIs("http") && !uri.schemeIs("https"))
-        open.apply(this, arguments);
-      else {
-        Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-          .getService(Ci.nsIExternalProtocolService).loadURI(uri);
-      }
-    };
-  },
-
-  onunload: function () {
-    Services.obs.removeObserver(addonsRegister, "addon-install-disabled");
-    Services.obs.removeObserver(addonsRegister, "addon-install-blocked");
-    Services.obs.removeObserver(addonsRegister, "addon-install-failed");
-    Services.obs.removeObserver(addonsRegister, "addon-install-complete");
-  },
-
-  // Originally taken from
-  // comm-central/source/mail/base/content/specialTabs.js
-  observe: function (aSubject, aTopic, aData) {
-    let brandBundle = document.getElementById("bundle_brand");
-    let extensionsBundle = document.getElementById("bundle_extensions");
-
-    let installInfo = aSubject.wrappedJSObject;
-    let notificationBox = document.getElementById("addonsNotify");
-    if (!notificationBox)
-      return;
-    let notificationID = aTopic;
-    let brandShortName = brandBundle.getString("brandShortName");
-    let notificationName, messageString, buttons;
-    const iconURL = "chrome://mozapps/skin/extensions/extensionGeneric.png";
-
-    switch (aTopic) {
-    case "addon-install-disabled":
-      notificationID = "xpinstall-disabled";
-
-      if (Services.prefs.prefIsLocked("xpinstall.enabled")) {
-        messageString =
-          extensionsBundle.getString("xpinstallDisabledMessageLocked");
-        buttons = [];
-      } else {
-        messageString = extensionsBundle.getString("xpinstallDisabledMessage");
-
-        buttons = [{
-          label: extensionsBundle.getString("xpinstallDisabledButton"),
-          accessKey:
-            extensionsBundle.getString("xpinstallDisabledButton.accesskey"),
-          popup: null,
-          callback: function editPrefs() {
-            Services.prefs.setBoolPref("xpinstall.enabled", true);
-            return false;
-          }
-        }];
-      }
-      if (!notificationBox.getNotificationWithValue(notificationID)) {
-        notificationBox.appendNotification(
-          messageString, notificationID, iconURL,
-          notificationBox.PRIORITY_CRITICAL_HIGH, buttons);
-      }
-      break;
-    case "addon-install-blocked":
-      messageString =
-        extensionsBundle.getFormattedString("xpinstallPromptWarning",
-                                            [brandShortName,
-                                             installInfo.originatingURI.host]);
-
-      buttons = [{
-        label: extensionsBundle.getString("xpinstallPromptAllowButton"),
-        accessKey:
-          extensionsBundle.getString("xpinstallPromptAllowButton.accesskey"),
-        popup: null,
-        callback: function() {
-          installInfo.install();
-        }
-      }];
-
-      if (!notificationBox.getNotificationWithValue(notificationName)) {
-        notificationBox.appendNotification(messageString, notificationName,
-                                           iconURL,
-                                           notificationBox.PRIORITY_WARNING_MEDIUM,
-                                           buttons);
-      }
-      break;
-    case "addon-install-failed":
-      // XXX TODO This isn't terribly ideal for the multiple failure case
-      for (let install of installInfo.installs) {
-        let host = ((installInfo.originatingURI instanceof Ci.nsIStandardURL) &&
-                    installInfo.originatingURI.host) ||
-                   ((install.sourceURI instanceof Ci.nsIStandardURL) &&
-                    install.sourceURI.host);
-
-        let error = (host || install.error == 0) ?
-                     "addonError" : "addonLocalError";
-        if (install.error != 0)
-          error += install.error;
-        else if (install.addon.blocklistState ==
-                 Ci.nsIBlocklistService.STATE_BLOCKED)
-          error += "Blocklisted";
-        else
-          error += "Incompatible";
-
-        messageString = extensionsBundle.getString(error);
-        messageString = messageString.replace("#1", install.name);
-        if (host)
-          messageString = messageString.replace("#2", host);
-        messageString = messageString.replace("#3", brandShortName);
-        messageString = messageString.replace("#4", Services.appinfo.version);
-
-        if (!notificationBox.getNotificationWithValue(notificationID)) {
-          notificationBox.appendNotification(
-            messageString, notificationID, iconURL,
-            notificationBox.PRIORITY_CRITICAL_HIGH, []);
-        }
-      }
-      break;
-    case "addon-install-complete":
-      let needsRestart = installInfo.installs.some(function(i) {
-        return i.addon.pendingOperations != AddonManager.PENDING_NONE;
-      });
-
-      if (needsRestart) {
-        messageString =
-          extensionsBundle.getString("addonsInstalledNeedsRestart");
-        buttons = [{
-          label: extensionsBundle.getString("addonInstallRestartButton"),
-          accessKey:
-            extensionsBundle.getString("addonInstallRestartButton.accesskey"),
-          popup: null,
-          callback: function() {
-            let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
-                               .createInstance(Ci.nsISupportsPRBool);
-            Services.obs.notifyObservers(cancelQuit,
-                                         "quit-application-requested",
-                                         "restart");
-            if (cancelQuit.data)
-              return; // somebody canceled our quit request
-
-            let appStartup = Cc["@mozilla.org/toolkit/app-startup;1"]
-                               .getService(Ci.nsIAppStartup);
-            appStartup.quit(Ci.nsIAppStartup.eAttemptQuit |
-                            Ci.nsIAppStartup.eRestart);
-          }
-        }];
-      } else {
-        messageString = extensionsBundle.getString("addonsInstalled");
-        buttons = [];
-
-        // Calculate the add-on type that is most popular in the list of
-        // installs.
-        let types = {};
-        let bestType = null;
-        for (let install of installInfo.installs) {
-          if (install.type in types)
-            types[install.type]++;
-          else
-            types[install.type] = 1;
-
-          if (!bestType || types[install.type] > types[bestType])
-            bestType = install.type;
-        }
-
-        // Switch to the correct type of addons
-        document.getElementById("dummychromebrowser")
-                .contentWindow
-                .loadView("addons://list/" + bestType);
-      }
-
-      messageString =
-        PluralForm.get(installInfo.installs.length, messageString);
-      messageString = messageString.replace("#1", installInfo.installs[0].name);
-      messageString = messageString.replace("#2", installInfo.installs.length);
-      messageString = messageString.replace("#3", brandShortName);
-
-      notificationBox.appendNotification(messageString, notificationID,
-                                         iconURL,
-                                         notificationBox.PRIORITY_INFO_MEDIUM,
-                                         buttons);
-      break;
-    }
-  }
-};
-
-window.addEventListener("load", addonsRegister.onload, {once: true});
deleted file mode 100644
--- a/im/content/extensions.xul
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-#endif
-
-<!DOCTYPE window [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
-  %brandDTD;
-  <!ENTITY % extensionsDTD SYSTEM "chrome://mozapps/locale/extensions/extensions.dtd">
-  %extensionsDTD;
-]>
-
-<window id="ib-addons-window" title="&addons.windowTitle; - &brandShortName;"
-        width="900" height="600" persist= "width height screenX screenY"
-        windowtype="Addons:Manager" disablefastfind="true"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-#ifdef XP_MACOSX
-#include menus.xul.inc
-#endif
-
-  <commandset id="addonsCommands">
-    <command id="cmd_close" oncommand="window.close();"/>
-  </commandset>
-
-  <keyset id="addonsKeys">
-    <key id="key_close" key="w" modifiers="accel" command="cmd_close"/>
-    <key id="key_close2" keycode="VK_ESCAPE" command="cmd_close"/>
-  </keyset>
-
-  <stringbundleset>
-    <stringbundle id="bundle_brand"
-                  src="chrome://branding/locale/brand.properties"/>
-    <stringbundle id="bundle_extensions"
-                  src="chrome://instantbird/locale/extensions.properties"/>
-  </stringbundleset>
-
-  <script type="application/javascript"
-          src="chrome://instantbird/content/extensions.js"/>
-
-  <notificationbox id="addonsNotify" flex="1">
-    <browser id="dummychromebrowser" flex="1"
-             disablesecurity="true" disablehistory="true"
-             src="chrome://mozapps/content/extensions/extensions.xul?type=extensions"/>
-  </notificationbox>
-</window>
deleted file mode 100644
--- a/im/content/group.xml
+++ /dev/null
@@ -1,412 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd" >
-  %instantbirdDTD;
-]>
-
-<bindings id="groupBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="group" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content persist="closed">
-      <xul:image class="twisty"/>
-      <xul:label flex="1" crop="end" xbl:inherits="value=name"/>
-      <xul:button anonid="hideGroupButton" class="hideGroupButton"
-                  tooltiptext="&hideGroupTooltip;"/>
-    </content>
-    <implementation implements="nsIObserver">
-     <constructor>
-      <![CDATA[
-        if (this.hasAttribute("closed"))
-          this.setAttribute("aria-expanded", "false");
-        else
-          this.setAttribute("aria-expanded", "true");
-      ]]>
-     </constructor>
-
-     <destructor>
-      <![CDATA[
-        if (this.tag) {
-          this.tag.removeObserver(this);
-          delete this.tag;
-        }
-      ]]>
-     </destructor>
-
-     <method name="build">
-      <parameter name="aGroup"/>
-      <body>
-      <![CDATA[
-        this.tag = aGroup;
-        let contacts = this.tag.getContacts();
-        if (!this.showOffline)
-          contacts = contacts.filter(c => c.online);
-        if (!contacts.length)
-          return false;
-
-        this.groupId = aGroup.id;
-        this.contacts = [ ];
-        this.contactsById = {};
-        this.setAttribute("id", "group" + this.groupId);
-
-        // Restore any persisted state.
-        let xulStore = Cc["@mozilla.org/xul/xulstore;1"].getService(Ci.nsIXULStore);
-        if (xulStore.getValue(document.location, this.id, "closed") == "true")
-          this.setAttribute("closed", "true");
-
-        contacts.sort(this.sortComparator).forEach(this.addContact, this);
-
-        let name;
-        if (this.tag.id != -1)
-          name = this.tag.name;
-        else {
-          name = Services.strings.createBundle("chrome://instantbird/locale/instantbird.properties")
-                         .GetStringFromName("group.otherContacts.name");
-        }
-        this.displayName = name;
-        this._updateGroupLabel();
-        this.tag.addObserver(this);
-        return true;
-      ]]>
-      </body>
-     </method>
-
-     <field name="_showOffline">false</field>
-     <property name="showOffline">
-       <getter>
-         <![CDATA[
-           return this._showOffline;
-         ]]>
-       </getter>
-       <setter>
-         <![CDATA[
-           this._showOffline = val;
-           if (val) {
-             this.tag.getContacts().filter(c => !c.online)
-                                   .forEach(this.addContact, this);
-             this._updateGroupLabel();
-           }
-           else {
-             this.contacts.filter(b => !b.contact.online)
-                          .forEach(function (b) {
-               b.destroy();
-               b.remove();
-             }, this);
-           }
-           return val;
-         ]]>
-       </setter>
-     </property>
-
-     <field name="_selectListener">null</field>
-     <field name="_pendingReorders">[]</field>
-     <method name="_reorderContactLater">
-       <parameter name="aContactElt"/>
-       <body>
-       <![CDATA[
-         if (this._pendingReorders.includes(aContactElt))
-           return;
-
-         this._pendingReorders.push(aContactElt);
-         if (!this._selectListener) {
-           this._selectListener = (function() {
-             let remaining = [];
-             for (let contactElt of this._pendingReorders) {
-               if (!contactElt.hasAttribute("selected") &&
-                   !contactElt.hasAttribute("open"))
-                 this.observe(contactElt.contact, "contact-display-name-changed");
-               else
-                 remaining.push(contactElt);
-             }
-             this._pendingReorders = remaining;
-             if (remaining.length == 0) {
-               this.parentNode.removeEventListener("select", this._selectListener);
-               this._selectListener = null;
-             }
-           }).bind(this);
-           this.parentNode.addEventListener("select", this._selectListener);
-         }
-       ]]>
-       </body>
-     </method>
-
-     <!-- nsIObserver implementation -->
-     <method name="observe">
-       <parameter name="aSubject"/>
-       <parameter name="aTopic"/>
-       <parameter name="aData"/>
-       <body>
-       <![CDATA[
-         if (this.showOffline && (aTopic == "contact-added" ||
-                                  aTopic == "contact-moved-in") ||
-             !this.showOffline && aSubject.online &&
-             (aTopic == "contact-availability-changed" ||
-              aTopic == "contact-added" ||
-              aTopic == "contact-moved-in")) {
-           this.addContact(aSubject);
-           this._updateGroupLabel();
-           return;
-         }
-
-         if (aTopic == "contact-no-longer-dummy") {
-           let oldId = parseInt(aData);
-           if (this.contactsById.hasOwnProperty(oldId)) {
-             let contact = this.contactsById[oldId];
-             delete this.contactsById[oldId];
-             this.contactsById[contact.contact.id] = contact;
-           }
-           return;
-         }
-
-         if (aTopic == "contact-display-name-changed") {
-           this.updateContactPosition(aSubject);
-           return;
-         }
-
-         if (aTopic == "tag-hidden") {
-           this.setAttribute("collapsing", "true");
-           this.addEventListener("transitionend", this._transitionEnd, true);
-           for (let contact of this.contacts) {
-             contact.state = "collapsing";
-             contact.destroy();
-           }
-           return;
-         }
-       ]]>
-       </body>
-     </method>
-
-     <!-- Takes as input two contact elements (imIContact type) and compares
-          - their nicknames alphabetically (case insensitive). This method
-          - behaves as a callback that Array.prototype.sort accepts as a
-          - parameter.
-          -->
-     <method name="sortComparator">
-      <parameter name="aContactA"/>
-      <parameter name="aContactB"/>
-      <body>
-      <![CDATA[
-        let a = aContactA.displayName.toLowerCase();
-        let b = aContactB.displayName.toLowerCase();
-        return a.localeCompare(b);
-      ]]>
-      </body>
-     </method>
-
-     <method name="addContact">
-      <parameter name="aContact"/>
-      <body>
-      <![CDATA[
-        if (this.contactsById.hasOwnProperty(aContact.id))
-          return;
-
-        var contactElt = document.createElement("contact");
-        if (this.hasAttribute("closed"))
-          contactElt.setAttribute("collapsed", "true");
-
-        let end = this.contacts.length;
-        // Avoid the binary search loop if the contacts were already sorted.
-        if (end != 0 &&
-            this.sortComparator(aContact, this.contacts[end - 1].contact) < 0) {
-          let start = 0;
-          while (start < end) {
-            let middle = start + Math.floor((end - start) / 2);
-            if (this.sortComparator(aContact, this.contacts[middle].contact) < 0)
-              end = middle;
-            else
-              start = middle + 1;
-          }
-        }
-        var last = end == 0 ? this : this.contacts[end - 1];
-        this.parentNode.insertBefore(contactElt, last.nextSibling);
-        contactElt.build(aContact, this);
-        this.contacts.splice(end, 0, contactElt);
-        this.contactsById[aContact.id] = contactElt;
-
-        if (this.hasAttribute("collapsing"))
-          this.removeAttribute("collapsing");
-      ]]>
-      </body>
-     </method>
-
-     <method name="updateContactPosition">
-      <parameter name="aSubject"/>
-      <body>
-      <![CDATA[
-        let contactElt = this.contactsById[aSubject.id];
-        let index = this.contacts.indexOf(contactElt);
-        if (index == -1) {
-          // Sometimes we get a display-name-changed notification for
-          // an offline contact, if it's not in the list, just ignore it.
-          return;
-        }
-        // See if the position of the contact should be changed.
-        if (index != 0 &&
-            this.sortComparator(contactElt.contact, this.contacts[index - 1].contact) < 0 ||
-            index != this.contacts.length - 1 &&
-            this.sortComparator(contactElt.contact, this.contacts[index + 1].contact) > 0) {
-          // Check if something prevents us from moving the contact now.
-          if (contactElt.hasAttribute("selected") ||
-              contactElt.hasAttribute("open"))
-            this._reorderContactLater(contactElt);
-          else {
-            contactElt.removeNode(true);
-            this.addContact(aSubject);
-          }
-        }
-      ]]>
-      </body>
-     </method>
-
-     <method name="removeContact">
-      <parameter name="aContact"/>
-      <body>
-      <![CDATA[
-        var i = this.contacts.indexOf(aContact);
-        if (i == -1)
-          throw "Removing a contact that doesn't exist?";
-
-        // create a new array to remove without breaking for each loops.
-        this.contacts = this.contacts.filter(c => c !== aContact);
-        delete this.contactsById[aContact.contact.id];
-
-        // Check if some contacts remain in the group, if empty remove it
-        if (!this.contacts.length) {
-          this.setAttribute("collapsing", "true");
-          this.addEventListener("transitionend", this._transitionEnd, true);
-        }
-        else
-          this._updateGroupLabel();
-      ]]>
-      </body>
-     </method>
-
-     <method name="_transitionEnd">
-      <body>
-      <![CDATA[
-        if (!this.hasAttribute("collapsing"))
-          return;
-        this.tag.removeObserver(this);
-        this.parentNode.removeGroup(this);
-      ]]>
-      </body>
-     </method>
-
-     <method name="hide">
-      <body>
-      <![CDATA[
-        const promptPrefName = "messenger.buddies.hideTagPrompt";
-        if (Services.prefs.getBoolPref(promptPrefName)) {
-          let bundle =
-            Services.strings.createBundle("chrome://instantbird/locale/instantbird.properties");
-          let name = this.displayName;
-          let promptTitle =
-            bundle.formatStringFromName("group.hidePrompt.title", [name], 1);
-          let promptMessage =
-            bundle.formatStringFromName("group.hidePrompt.message", [name], 1);
-          let hideButton = bundle.GetStringFromName("group.hidePrompt.button");
-          let promptCheckbox =
-            bundle.GetStringFromName("group.hidePrompt.checkbox");
-          let prompts = Services.prompt;
-          let checkbox = {};
-          let flags = prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_0 +
-                      prompts.BUTTON_TITLE_CANCEL * prompts.BUTTON_POS_1 +
-                      prompts.BUTTON_POS_0_DEFAULT;
-          if (prompts.confirmEx(window, promptTitle, promptMessage, flags,
-                                hideButton, null, null, promptCheckbox, checkbox))
-            return;
-
-          if (!checkbox.value)
-            Services.prefs.setBoolPref(promptPrefName, false);
-        }
-        Services.tags.hideTag(this.tag);
-      ]]>
-      </body>
-     </method>
-
-     <method name="_updateClosedState">
-      <parameter name="aClosed"/>
-      <body>
-      <![CDATA[
-        for (let contact of this.contacts)
-          contact.collapsed = aClosed;
-      ]]>
-      </body>
-     </method>
-
-     <method name="close">
-      <body>
-      <![CDATA[
-        if (this.hasAttribute("closed")) {
-          this.removeAttribute("closed");
-          this.setAttribute("aria-expanded", "true");
-          this._updateClosedState(false);
-        }
-        else {
-          this.setAttribute("closed", "true");
-          this.setAttribute("aria-expanded", "false");
-          this._updateClosedState(true);
-        }
-
-        this._updateGroupLabel();
-      ]]>
-      </body>
-     </method>
-
-     <field name="displayName"></field>
-     <method name="_updateGroupLabel">
-      <body>
-      <![CDATA[
-        let name = this.displayName;
-        if (this.hasAttribute("closed"))
-          name += " (" + this.contacts.length + ")";
-
-        this.setAttribute("name", name);
-      ]]>
-      </body>
-     </method>
-
-     <method name="keyPress">
-      <parameter name="aEvent"/>
-      <body>
-      <![CDATA[
-        switch (aEvent.keyCode) {
-          case aEvent.DOM_VK_RETURN:
-            this.close();
-            break;
-
-          case aEvent.DOM_VK_LEFT:
-            if (!this.hasAttribute("closed"))
-              this.close();
-            break;
-
-          case aEvent.DOM_VK_RIGHT:
-            if (this.hasAttribute("closed"))
-              this.close();
-            break;
-        }
-      ]]>
-      </body>
-     </method>
-    </implementation>
-    <handlers>
-     <handler event="click">
-     <![CDATA[
-        // Check if there was 1 click on the image or 2 clicks on the label
-        if ((event.detail == 1 && event.originalTarget.localName == "image") ||
-            (event.detail == 2 && event.originalTarget.localName == "label"))
-          this.close();
-
-        if (event.originalTarget.localName == "button")
-          this.hide();
-     ]]>
-     </handler>
-    </handlers>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/hiddenWindow.xul
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-# -*- Mode: HTML -*-
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-
-<window id="main-window"
-        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-#include menus.xul.inc
-
-<script type="application/javascript">
-  addEventListener("load", function() {
-    // disable the minimize and zoom menu items.
-    ["minimizeWindow", "zoomWindow"].forEach(function(aId) {
-      document.getElementById(aId).setAttribute("disabled", "true");
-    });
-
-    // also hide the window-list separator
-    document.getElementById("sep-window-list").setAttribute("hidden", "true");
-  });
-</script>
-
-<browser id="hiddenBrowser" disablehistory="true"/>
-
-</window>
-
-#endif
deleted file mode 100644
--- a/im/content/instantbird.css
+++ /dev/null
@@ -1,72 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-conversation {
-  -moz-binding: url("chrome://instantbird/content/conversation.xml#conversation");
-}
-
-newtab {
-  -moz-binding: url("chrome://instantbird/content/newtab.xml#newtab");
-}
-
-.newtab-item {
-  -moz-binding: url("chrome://instantbird/content/newtab.xml#newtab-item");
-}
-
-debugLogPanel {
-  -moz-binding: url("chrome://instantbird/content/debugLogPanel.xml#debugLogPanel")
-}
-
-aboutPanel {
-  -moz-binding: url("chrome://instantbird/content/aboutPanel.xml#aboutPanel");
-}
-
-.conv-chat:not([chat]) {
-  display: none;
-}
-
-.statusMessage[editable],
-.statusMessageWithDash[editable] {
-  cursor: text !important;
-}
-
-.statusMessage[editing] {
-  -moz-appearance: textfield;
-  -moz-binding: url('chrome://global/content/bindings/textbox.xml#textbox');
-}
-
-@media all and (min-height: 251px) {
-  .conv-top-info {
-    -moz-binding: url("chrome://instantbird/content/conversation.xml#conv-info-large") !important;
-  }
-}
-
-@media all and (max-height: 250px) {
-  .conv-top-info {
-    -moz-binding: url("chrome://instantbird/content/conversation.xml#conv-info-small") !important;
-  }
-
-  .statusMessage:not([editing]),
-  .statusMessageWithDash[editing] {
-    display: none;
-  }
-}
-
-@media all and (max-height: 200px) {
-  .conv-top-info {
-    display: none;
-  }
-}
-
-.alltargets-item {
-  -moz-binding: url("chrome://instantbird/content/conversation.xml#menuitem-target");
-}
-
-browser[browser-type="conversation"] {
-  -moz-binding: url("chrome://chat/content/convbrowser.xml#browser");
-}
-
-findbar {
-  overflow-x: hidden;
-}
deleted file mode 100644
--- a/im/content/instantbird.js
+++ /dev/null
@@ -1,295 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.defineModuleGetter(this, "AppConstants",
-                               "resource://gre/modules/AppConstants.jsm");
-
-var TAB_DROP_TYPE = "application/x-moz-tabbrowser-tab";
-
-var convWindow = {
-  load: function mo_load() {
-    ChromeUtils.import("resource:///modules/imWindows.jsm");
-    Conversations.registerWindow(window);
-
-    if ("arguments" in window) {
-      while (window.arguments[0] &&
-             window.arguments[0] instanceof XULElement) {
-        // swap the given tab with the default dummy conversation tab
-        // and then close the original tab in the other window.
-        let tab = window.arguments.shift();
-        getTabBrowser().importPanel(tab);
-      }
-    }
-
-    window.addEventListener("mousemove", MousePosTracker);
-    window.addEventListener("dragover", MousePosTracker);
-
-    window.addEventListener("unload", convWindow.unload);
-    window.addEventListener("resize", convWindow.onresize);
-    window.addEventListener("activate", convWindow.onactivate, true);
-    window.QueryInterface(Ci.nsIInterfaceRequestor)
-          .getInterface(Ci.nsIWebNavigation)
-          .QueryInterface(Ci.nsIDocShellTreeItem).treeOwner
-          .QueryInterface(Ci.nsIInterfaceRequestor)
-          .getInterface(Ci.nsIXULWindow)
-          .XULBrowserWindow = window.XULBrowserWindow;
-  },
-  unload: function mo_unload() {
-    Conversations.unregisterWindow(window);
-  },
-  onactivate: function mo_onactivate(aEvent) {
-    Conversations.onWindowFocus(window);
-    setTimeout(function () {
-      // setting the focus to the textbox just after the window is
-      // activated puts the textbox in an inconsistent state, some
-      // special characters like ^ don't work, so delay the focus
-      // operation...
-      let panel = getTabBrowser().selectedPanel;
-      panel.focus();
-      if ("onSelect" in panel)
-        panel.onSelect();
-    }, 0);
-  },
-  onresize: function mo_onresize(aEvent) {
-    if (aEvent.originalTarget != window)
-      return;
-
-    // Resize each textbox (if the splitter has not been used).
-    let panels = getTabBrowser().tabPanels;
-    for (let panel of panels) {
-      if ("onResize" in panel)
-        panel.onResize(aEvent);
-    }
-  }
-};
-
-function getConvWindowURL() { return "chrome://instantbird/content/instantbird.xul"; }
-
-function getTabBrowser() { return document.getElementById("conversations"); }
-
-function getBrowser() { return getTabBrowser().selectedBrowser; }
-
-// Copied from mozilla/browser/base/content/utilityOverlay.js
-function trimURL(aURL) {
-  // This function must not modify the given URL such that calling
-  // nsIURIFixup::createFixupURI with the result will produce a different URI.
-  return aURL /* remove single trailing slash for http/https/ftp URLs */
-             .replace(/^((?:http|https|ftp):\/\/[^/]+)\/$/, "$1")
-              /* remove http:// unless the host starts with "ftp\d*\." or contains "@" */
-             .replace(/^http:\/\/((?!ftp\d*\.)[^\/@]+(?:\/|$))/, "$1");
-}
-
-// Copied from mozilla/browser/base/content/browser.js (and simplified)
-var XULBrowserWindow = {
-  // Stored Status
-  status: "",
-  defaultStatus: "",
-  overLink: "",
-  statusText: "",
-
-  QueryInterface: function (aIID) {
-    if (aIID.equals(Ci.nsISupportsWeakReference) ||
-        aIID.equals(Ci.nsIXULBrowserWindow) ||
-        aIID.equals(Ci.nsISupports))
-      return this;
-    throw Cr.NS_NOINTERFACE;
-  },
-
-  get statusTextField () {
-    return getTabBrowser().getStatusPanel();
-  },
-
-  setStatus: function (status) {
-    this.status = status;
-    this.updateStatusField();
-  },
-
-  setJSStatus: function () {
-    // unsupported
-  },
-
-  setDefaultStatus: function (status) {
-    this.defaultStatus = status;
-    this.updateStatusField();
-  },
-
-  setOverLink: function (url, anchorElt) {
-    // Encode bidirectional formatting characters.
-    // (RFC 3987 sections 3.2 and 4.1 paragraph 6)
-    url = url.replace(/[\u200e\u200f\u202a\u202b\u202c\u202d\u202e]/g,
-                      encodeURIComponent);
-
-    // if (gURLBar && gURLBar._mayTrimURLs /* corresponds to browser.urlbar.trimURLs */)
-    // This pref is true by default for Firefox, let's follow that.
-    url = trimURL(url);
-
-    this.overLink = url;
-    LinkTargetDisplay.update();
-  },
-
-  // Called before links are navigated to, allows us to retarget them if needed.
-  onBeforeLinkTraversal: function(originalTarget, linkURI, linkNode, isAppTab) {
-    // Simplified for IB.
-    return originalTarget;
-  },
-
-  updateStatusField: function () {
-    var text, type, types = ["overLink"];
-    // if (this._busyUI)
-    // Instantbird uses the status for typing notifications, which should
-    // always be shown.
-    types.push("status");
-    types.push("defaultStatus");
-    for (type of types) {
-      text = this[type];
-      if (text)
-        break;
-    }
-
-    // check the current value so we don't trigger an attribute change
-    // and cause needless (slow!) UI updates
-    if (this.statusText != text) {
-      let field = this.statusTextField;
-      field.setAttribute("previoustype", field.getAttribute("type"));
-      field.setAttribute("type", type);
-      // Show IB typing notifications on the opposite side.
-      if (this.status)
-        field.setAttribute("flipped", "true");
-      else
-        field.removeAttribute("flipped");
-      field.label = text;
-      field.setAttribute("crop", type == "overLink" ? "center" : "end");
-      this.statusText = text;
-    }
-  }
-};
-
-// Copied from mozilla/browser/base/content/browser.js
-var LinkTargetDisplay = {
-  DELAY_SHOW: 80, // Services.prefs.getIntPref("browser.overlink-delay");
-  DELAY_HIDE: 250,
-  _timer: 0,
-
-  get _isVisible () { return XULBrowserWindow.statusTextField.label != ""; },
-
-  update: function () {
-    clearTimeout(this._timer);
-    window.removeEventListener("mousemove", this, true);
-
-    if (!XULBrowserWindow.overLink) {
-      if (XULBrowserWindow.hideOverLinkImmediately)
-        this._hide();
-      else
-        this._timer = setTimeout(this._hide.bind(this), this.DELAY_HIDE);
-      return;
-    }
-
-    if (this._isVisible) {
-      XULBrowserWindow.updateStatusField();
-    } else {
-      // Let the display appear when the mouse doesn't move within the delay
-      this._showDelayed();
-      window.addEventListener("mousemove", this, true);
-    }
-  },
-
-  handleEvent: function (event) {
-    switch (event.type) {
-      case "mousemove":
-        // Restart the delay since the mouse was moved
-        clearTimeout(this._timer);
-        this._showDelayed();
-        break;
-    }
-  },
-
-  _showDelayed: function () {
-    this._timer = setTimeout(function (self) {
-      XULBrowserWindow.updateStatusField();
-      window.removeEventListener("mousemove", self, true);
-    }, this.DELAY_SHOW, this);
-  },
-
-  _hide: function () {
-    clearTimeout(this._timer);
-
-    XULBrowserWindow.updateStatusField();
-  }
-};
-
-// Copied from mozilla/browser/base/content/browser.js
-var MousePosTracker = {
-  _listeners: new Set(),
-  _x: 0,
-  _y: 0,
-  get _windowUtils() {
-    delete this._windowUtils;
-    return this._windowUtils = window.getInterface(Ci.nsIDOMWindowUtils);
-  },
-
-  addListener: function (listener) {
-    if (this._listeners.has(listener))
-      return;
-
-    listener._hover = false;
-    this._listeners.add(listener);
-
-    this._callListener(listener);
-  },
-
-  removeListener: function (listener) {
-    this._listeners.delete(listener);
-  },
-
-  handleEvent: function (event) {
-    var fullZoom = this._windowUtils.fullZoom;
-    this._x = event.screenX / fullZoom - window.mozInnerScreenX;
-    this._y = event.screenY / fullZoom - window.mozInnerScreenY;
-
-    this._listeners.forEach(function (listener) {
-      try {
-        this._callListener(listener);
-      } catch (e) {
-        Cu.reportError(e);
-      }
-    }, this);
-  },
-
-  _callListener: function (listener) {
-    let rect = listener.getMouseTargetRect();
-    let hover = this._x >= rect.left &&
-                this._x <= rect.right &&
-                this._y >= rect.top &&
-                this._y <= rect.bottom;
-
-    if (hover == listener._hover)
-      return;
-
-    listener._hover = hover;
-
-    if (hover) {
-      if (listener.onMouseEnter)
-        listener.onMouseEnter();
-    } else {
-      if (listener.onMouseLeave)
-        listener.onMouseLeave();
-    }
-  }
-};
-
-function findAgain(aReversed) {
-  let conv = getTabBrowser().selectedConversation;
-  // Find from the bottom up if it's a conversation.
-  if (conv) {
-    conv.findbar.onFindAgainCommand(!aReversed);
-    return;
-  }
-  let panel = getTabBrowser().selectedPanel;
-  if (!panel)
-    return;
-  if (panel.findbar)
-    panel.findbar.onFindAgainCommand(aReversed);
-}
-
-this.addEventListener("load", convWindow.load);
deleted file mode 100644
--- a/im/content/instantbird.xul
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/instantbird.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/blist.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/tabbrowser.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/tabbrowser.css" type="text/css"?>
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-#endif
-
-<?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
-
-<!DOCTYPE window [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %brandDTD;
-  <!ENTITY % textcontextDTD SYSTEM "chrome://global/locale/textcontext.dtd">
-  %textcontextDTD;
-]>
-
-<window
-  id     = "convWindow"
-  windowtype="Messenger:convs"
-  title  = "&convWindow.title;"
-  titlemenuseparator="&convWindow.titlemodifiermenuseparator;"
-  titlemodifier="&convWindow.titlemodifier;"
-  width  = "500"
-  height = "600"
-  onclose= "return getTabBrowser().warnAboutClosingTabs(true);"
-  persist= "width height screenX screenY"
-  xmlns:svg="http://www.w3.org/2000/svg"
-  xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/instantbird.js"/>
-#ifdef XP_MACOSX
-  <script type="application/javascript" src="chrome://instantbird/content/macgestures.js"/>
-#else
-  <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
-#endif
-  <script type="application/javascript" src="chrome://global/content/viewZoomOverlay.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/convZoom.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/nsContextMenu.js"/>
-
-#ifdef XP_MACOSX
-# As menus.xul.inc, but with an Edit menu.
-  <commandset id="maincommandset"/>
-  <keyset id="mainkeyset"/>
-  <menubar id="blistMenubar">
-    <menu id="menu_edit">
-      <menupopup id="menu_editpopup">
-        <menuitem id="menu_undo"/>
-        <menuitem id="menu_redo"/>
-        <menuseparator/>
-        <menuitem id="menu_cut"/>
-        <menuitem id="menu_copy"/>
-        <menuitem id="menu_paste"/>
-        <menuitem id="menu_delete"/>
-        <menuseparator/>
-        <menuitem id="menu_selectAll"/>
-        <menuseparator/>
-        <menuitem id="menu_find"/>
-        <menuitem id="menu_findAgain"/>
-      </menupopup>
-    </menu>
-  </menubar>
-  <popupset id="mainPopupSet"/>
-#endif
-
-  <commandset id="conversationsCommands">
-    <command id="cmd_newtab" oncommand="Conversations.showNewTab()"/>
-    <command id="cmd_close" oncommand="getTabBrowser().removeCurrentTab()"/>
-    <command id="cmd_putOnHold"
-             oncommand="var tabbrowser = getTabBrowser();
-                        if (!tabbrowser.selectedConversation) return;
-                        tabbrowser.selectedConversation.hide();
-                        tabbrowser.removeCurrentTab();"/>
-    <command id="cmd_showLogs"
-             oncommand="var conv = getTabBrowser().selectedConversation;
-                        if (conv) conv.showLogs();"/>
-    <command id="cmd_textZoomReduce" oncommand="if (getBrowser()) FullZoom.reduce();"/>
-    <command id="cmd_textZoomEnlarge" oncommand="if (getBrowser()) FullZoom.enlarge();"/>
-    <command id="cmd_textZoomReset" oncommand="if (getBrowser()) FullZoom.reset();"/>
-    <command id="cmd_find"
-             oncommand="var panel = getTabBrowser().selectedPanel;
-                        if (!panel) return;
-                        if (panel.findbar) panel.findbar.onFindCommand();"/>
-    <command id="cmd_findAgain"
-             oncommand="findAgain(false)"/>
-    <command id="cmd_findPrevious"
-             oncommand="findAgain(true)"/>
-    <commandset id="editMenuCommands"/>
-  </commandset>
-
-  <keyset id="conversationsKeys">
-    <key id="key_newtab" key="t" modifiers="accel" command="cmd_newtab"/>
-    <key id="key_close" key="w" modifiers="accel" command="cmd_close"/>
-    <key id="key_putOnHold" keycode="VK_ESCAPE" command="cmd_putOnHold"/>
-    <key id="key_showLogs" key="h" modifiers="accel,shift" command="cmd_showLogs"/>
-    <key id="key_textZoomEnlarge" key="&textEnlarge.commandkey;" command="cmd_textZoomEnlarge" modifiers="accel"/>
-    <key id="key_textZoomEnlarge2" key="&textEnlarge.commandkey2;" command="cmd_textZoomEnlarge" modifiers="accel"/>
-    <key id="key_textZoomEnlarge3" key="&textEnlarge.commandkey3;" command="cmd_textZoomEnlarge" modifiers="accel"/>
-    <key id="key_textZoomReduce"  key="&textReduce.commandkey;" command="cmd_textZoomReduce" modifiers="accel"/>
-    <key id="key_textZoomReduce2"  key="&textReduce.commandkey2;" command="cmd_textZoomReduce" modifiers="accel"/>
-    <key id="key_textZoomReset" key="&textReset.commandkey;" command="cmd_textZoomReset" modifiers="accel"/>
-    <key id="key_textZoomReset2" key="&textReset.commandkey2;" command="cmd_textZoomReset" modifiers="accel"/>
-    <key id="key_find" key="&findOnCmd.commandkey;" command="cmd_find" modifiers="accel"/>
-    <key id="key_findAgain" key="&findAgainCmd.commandkey;" command="cmd_findAgain" modifiers="accel"/>
-    <key id="key_findPrevious" key="&findAgainCmd.commandkey;" command="cmd_findPrevious" modifiers="accel,shift"/>
-    <key keycode="&findAgainCmd.commandkey2;" command="cmd_findAgain"/>
-    <key keycode="&findAgainCmd.commandkey2;"  command="cmd_findPrevious" modifiers="shift"/>
-
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-#define XP_LINUX
-#endif
-#endif
-#ifdef XP_LINUX
-#define NUM_SELECT_TAB_MODIFIER alt
-#else
-#define NUM_SELECT_TAB_MODIFIER accel
-#endif
-#expand    <key id="key_selectTab1" oncommand="getTabBrowser().selectTabAtIndex(0, event);" key="1" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab2" oncommand="getTabBrowser().selectTabAtIndex(1, event);" key="2" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab3" oncommand="getTabBrowser().selectTabAtIndex(2, event);" key="3" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab4" oncommand="getTabBrowser().selectTabAtIndex(3, event);" key="4" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab5" oncommand="getTabBrowser().selectTabAtIndex(4, event);" key="5" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab6" oncommand="getTabBrowser().selectTabAtIndex(5, event);" key="6" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab7" oncommand="getTabBrowser().selectTabAtIndex(6, event);" key="7" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectTab8" oncommand="getTabBrowser().selectTabAtIndex(7, event);" key="8" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-#expand    <key id="key_selectLastTab" oncommand="getTabBrowser().selectTabAtIndex(-1, event);" key="9" modifiers="__NUM_SELECT_TAB_MODIFIER__"/>
-  </keyset>
-
-  <stringbundleset id="stringbundleset">
-    <stringbundle id="bundle_instantbird" src="chrome://instantbird/locale/instantbird.properties"/>
-  </stringbundleset>
-
-  <popupset id="mainPopupSet">
-    <tooltip id="imTooltip" type="im"/>
-
-    <menupopup id="contentAreaContextMenu"
-               onpopupshowing="if (event.target != this) return true; gContextMenu = new nsContextMenu(this, window.getBrowser()); return gContextMenu.shouldDisplay;"
-               onpopuphiding="if (event.target == this &amp;&amp; gContextMenu) { gContextMenu.cleanup(); gContextMenu = null; }">
-      <menuitem id="context-nick-openconv"
-                oncommand="gContextMenu.nickOpenConv();"/>
-      <menuitem id="context-nick-showlogs"
-                oncommand="gContextMenu.nickShowLogs();"/>
-      <menu id="context-nick-addcontact"/>
-      <menuseparator id="context-sep-nick"/>
-
-      <menuitem id="context-openlink"
-                label="&openLinkCmd.label;"
-                accesskey="&openLinkCmd.accesskey;"
-                oncommand="gContextMenu.openLink();"/>
-      <menuitem id="context-copyemail"
-                label="&copyEmailCmd.label;"
-                accesskey="&copyEmailCmd.accesskey;"
-                oncommand="gContextMenu.copyEmail();"/>
-      <menuitem id="context-copylink"
-                label="&copyLinkCmd.label;"
-                accesskey="&copyLinkCmd.accesskey;"
-                oncommand="goDoCommand('cmd_copyLink');"/>
-      <menuseparator id="context-sep-copylink"/>
-
-      <menuitem id="context-copy"
-                label="&copyCmd.label;"
-                accesskey="&copyCmd.accesskey;"
-                command="cmd_copy"/>
-      <menuitem id="context-selectall"
-                label="&selectAllCmd.label;"
-                accesskey="&selectAllCmd.accesskey;"
-                command="cmd_selectAll"/>
-      <menuseparator id="context-sep-selectall"/>
-      <menuseparator id="context-sep-messageactions"/>
-      <menuitem id="context-searchselect"
-                oncommand="gContextMenu.searchSelection();"/>
-      <menu id="context-searchselect-with">
-        <menupopup id="context-popup-searchselect-with"
-                   onpopupshowing="gContextMenu.buildSearchEngineList();"
-                   oncommand="gContextMenu.searchSelectionWith(event)">
-          <menuseparator id="context-sep-enginemanager"/>
-          <menuitem id="context-enginemanager"
-                    label="&engineManagerCmd.label;"
-                    oncommand="gContextMenu.openEngineManager();"/>
-        </menupopup>
-      </menu>
-    </menupopup>
-  </popupset>
-
-  <tabconversation id="conversations" flex="1"
-                   contenttooltip="imTooltip"
-                   contentcontextmenu="contentAreaContextMenu"/>
-
-#ifdef XP_MACOSX
-  <svg:svg height="0">
-    <svg:mask id="pinstripe-tab-left-curve-mask" maskContentUnits="userSpaceOnUse">
-      <svg:circle cx="9" cy="3" r="3" fill="white"/>
-      <svg:rect x="9" y="0" width="3" height="3" fill="white"/>
-      <svg:rect x="6" y="3" width="6" height="19" fill="white"/>
-      <svg:rect x="1" y="17" width="5" height="5" fill="white"/>
-      <svg:circle cx="1" cy="17" r="5"/>
-      <svg:rect x="0" y="22" width="12" height="1" fill="white"/>
-    </svg:mask>
-    <svg:mask id="pinstripe-tab-right-curve-mask" maskContentUnits="userSpaceOnUse">
-      <svg:circle cx="3" cy="3" r="3" fill="white"/>
-      <svg:rect x="0" y="0" width="3" height="3" fill="white"/>
-      <svg:rect x="0" y="3" width="6" height="19" fill="white"/>
-      <svg:rect x="6" y="17" width="5" height="5" fill="white"/>
-      <svg:circle cx="11" cy="17" r="5"/>
-      <svg:rect x="0" y="22" width="12" height="1" fill="white"/>
-    </svg:mask>
-  </svg:svg>
-#endif
-</window>
deleted file mode 100644
--- a/im/content/jar.mn
+++ /dev/null
@@ -1,121 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#filter substitution
-
-instantbird.jar:
-% content instantbird %content/instantbird/
-#ifdef XP_MACOSX
-% overlay chrome://global/content/console.xul chrome://instantbird/content/jsConsoleOverlay.xul
-% overlay chrome://mozapps/content/update/updates.xul chrome://instantbird/content/softwareUpdateOverlay.xul
-#endif
-	content/instantbird/aboutDialog.css
-*	content/instantbird/aboutDialog.xul
-	content/instantbird/aboutPanel.xml
-	content/instantbird/account.js
-	content/instantbird/accounts.js
-*	content/instantbird/accounts.xul
-	content/instantbird/accountWizard.css
-	content/instantbird/accountWizard.js
-	content/instantbird/accountWizard.xul
-	content/instantbird/accountWizard.xml
-	content/instantbird/account.xul
-	content/instantbird/addbuddy.js
-	content/instantbird/addbuddy.xul
-	content/instantbird/newtab.xml
-	content/instantbird/blist.css
-	content/instantbird/blist.js
-*	content/instantbird/blist.xul
-	content/instantbird/buddy.xml
-	content/instantbird/contact.xml
-	content/instantbird/conversation.xml
-	content/instantbird/conv.xml
-	content/instantbird/credits.xhtml
-	content/instantbird/debugLogPanel.xml
-	content/instantbird/debugLog.html
-	content/instantbird/engineManager.js
-	content/instantbird/engineManager.xul
-	content/instantbird/extensions.js
-*	content/instantbird/extensions.xul
-	content/instantbird/extensions-discover.js
-	content/instantbird/extensions-discover.xul
-	content/instantbird/group.xml
-	content/instantbird/instantbird.css
-	content/instantbird/instantbird.js
-*	content/instantbird/instantbird.xul
-	content/instantbird/convZoom.js
-	content/instantbird/joinchat.js
-	content/instantbird/joinchat.xul
-	content/instantbird/jsTreeView.js
-*	content/instantbird/menus.xul
-*	content/instantbird/menus.js
-	content/instantbird/nsContextMenu.js
-	content/instantbird/proxies.js
-	content/instantbird/proxies.xul
-	content/instantbird/proxies.css
-	content/instantbird/proxy.xml
-*	content/instantbird/tabbrowser.xml
-	content/instantbird/tabbrowser.css
-	content/instantbird/utilities.js
-*	content/instantbird/viewlog.xul
-	content/instantbird/viewlog.js
-	content/instantbird/viewlog.css
-#ifdef XP_MACOSX
-*	content/instantbird/hiddenWindow.xul
-	content/instantbird/menus-mac.xul
-	content/instantbird/macgestures.js
-*	content/instantbird/jsConsoleOverlay.xul
-*	content/instantbird/softwareUpdateOverlay.xul
-#elifdef XP_WIN
-	content/instantbird/menus-win.xul
-#else
-	content/instantbird/menus-unix.xul
-#endif
-*	content/instantbird/preferences/advanced.xul            (preferences/advanced.xul)
-*	content/instantbird/preferences/advanced.js             (preferences/advanced.js)
-	content/instantbird/preferences/applications.xul        (preferences/applications.xul)
-*	content/instantbird/preferences/applications.js         (preferences/applications.js)
-	content/instantbird/preferences/applicationManager.xul  (preferences/applicationManager.xul)
- 	content/instantbird/preferences/applicationManager.js   (preferences/applicationManager.js)
-*	content/instantbird/preferences/colors.xul              (preferences/colors.xul)
-	content/instantbird/preferences/content.xul             (preferences/content.xul)
-	content/instantbird/preferences/content.js              (preferences/content.js)
-*	content/instantbird/preferences/connection.xul          (preferences/connection.xul)
-	content/instantbird/preferences/connection.js           (preferences/connection.js)
-	content/instantbird/preferences/handlers.xml            (preferences/handlers.xml)
-	content/instantbird/preferences/handlers.css            (preferences/handlers.css)
-*	content/instantbird/preferences/main.xul                (preferences/main.xul)
-	content/instantbird/preferences/main.js                 (preferences/main.js)
-*	content/instantbird/preferences/preferences.xul         (preferences/preferences.xul)
-	content/instantbird/preferences/privacy.xul             (preferences/privacy.xul)
-	content/instantbird/preferences/privacy.js              (preferences/privacy.js)
-	content/instantbird/preferences/themes.xul              (preferences/themes.xul)
-	content/instantbird/preferences/themes.js               (preferences/themes.js)
-	content/instantbird/preferences/tabs.xul                (preferences/tabs.xul)
-	content/instantbird/preferences/tabs.js                 (preferences/tabs.js)
-	content/instantbird/preferences/messagestyle.js	        (preferences/messagestyle.js)
-	content/instantbird/preferences/smileys.js		(preferences/smileys.js)
-	content/instantbird/preferences/smiley.css		(preferences/smiley.css)
-	content/instantbird/preferences/smiley.xml		(preferences/smiley.xml)
-# override the toolkit license.html file
-* 	content/instantbird/license.html                        (/@mozreltopsrcdir@/toolkit/content/license.html)
-% override chrome://global/content/license.html chrome://instantbird/content/license.html
-
-toolkit.jar:
-# toolkit dropped nsDragAndDrop.js in bug 1162050, ship a copy until we can remove it.
-	content/global/nsDragAndDrop.js 			(../../mail/base/content/nsDragAndDrop.js)
-
-#ifdef DEBUG
-debug.jar:
-% content debug %content/debug/
-% overlay chrome://instantbird/content/menus.xul chrome://debug/content/debug.xul
-% overlay chrome://instantbird/content/instantbird.xul chrome://debug/content/viewselectionsource.xul
-	content/debug/debug.js	(debug/debug.js)
-	content/debug/debug.xul	(debug/debug.xul)
-	content/debug/viewselectionsource.xul (debug/viewselectionsource.xul)
-% content fake %content/fake/
-% overlay chrome://instantbird/content/blist.xul chrome://fake/content/fake.xul
-	content/fake/fake.js (debug/fake/fake.js)
-	content/fake/fake.xul (debug/fake/fake.xul)
-#endif
deleted file mode 100644
--- a/im/content/joinchat.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource:///modules/imWindows.jsm");
-
-var autoJoinPref = "autoJoin";
-
-var joinChat = {
-  onload: function jc_onload() {
-    var accountList = document.getElementById("accountlist");
-    for (let acc of getIter(Services.accounts.getAccounts())) {
-      if (!acc.connected || !acc.canJoinChat)
-        continue;
-      var proto = acc.protocol;
-      var item = accountList.appendItem(acc.name, acc.id, proto.name);
-      item.setAttribute("image", proto.iconBaseURI + "icon.png");
-      item.setAttribute("class", "menuitem-iconic");
-      item.account = acc;
-    }
-    if (!accountList.itemCount) {
-      document.getElementById("joinChatDialog").cancelDialog();
-      throw "No connected MUC enabled account!";
-    }
-    accountList.selectedIndex = 0;
-  },
-
-  onAccountSelect: function jc_onAccountSelect() {
-    let ab = document.getElementById("separatorRow1");
-    while (ab.nextSibling && ab.nextSibling.id != "separatorRow2")
-      ab.nextSibling.remove();
-
-    let acc = document.getElementById("accountlist").selectedItem.account;
-    let sep = document.getElementById("separatorRow2");
-    let defaultValues = acc.getChatRoomDefaultFieldValues();
-    joinChat._values = defaultValues;
-    joinChat._fields = [];
-    joinChat._account = acc;
-
-    let protoId = acc.protocol.id;
-    document.getElementById("autojoin").hidden =
-      !(protoId == "prpl-irc" || protoId == "prpl-jabber" ||
-      protoId == "prpl-gtalk");
-
-    for (let field of getIter(acc.getChatRoomFields())) {
-      let row = document.createElement("row");
-
-      let label = document.createElement("label");
-      let text = field.label;
-      let match = /_(.)/.exec(text);
-      if (match) {
-        label.setAttribute("accesskey", match[1]);
-        text = text.replace(/_/, "");
-      }
-      label.setAttribute("value", text);
-      label.setAttribute("control", "field-" + field.identifier);
-      row.appendChild(label);
-
-      let textbox = document.createElement("textbox");
-      textbox.setAttribute("id", "field-" + field.identifier);
-      let val = defaultValues.getValue(field.identifier);
-      if (val)
-        textbox.setAttribute("value", val);
-      if (field.type == Ci.prplIChatRoomField.TYPE_PASSWORD)
-        textbox.setAttribute("type", "password");
-      else if (field.type == Ci.prplIChatRoomField.TYPE_INT) {
-        textbox.setAttribute("type", "number");
-        textbox.setAttribute("min", field.min);
-        textbox.setAttribute("max", field.max);
-      }
-      row.appendChild(textbox);
-
-      if (!field.required) {
-        label = document.createElement("label");
-        text = document.getElementById("optionalcolumn")
-                       .getAttribute("labeltxt");
-        label.setAttribute("value", text);
-        row.appendChild(label);
-      }
-
-      row.setAttribute("align", "baseline");
-      sep.parentNode.insertBefore(row, sep);
-      joinChat._fields.push({field: field, textbox: textbox});
-    }
-
-    window.sizeToContent();
-  },
-
-  join: function jc_join() {
-    let values = joinChat._values;
-    for (let field of joinChat._fields) {
-      let val = field.textbox.value.trim();
-      if (!val && field.field.required) {
-        field.textbox.focus();
-        //FIXME: why isn't the return false enough?
-        throw "Some required fields are empty!";
-        return false;
-      }
-      if (val)
-        values.setValue(field.field.identifier, val);
-    }
-    let account = joinChat._account;
-    account.joinChat(values);
-
-    let protoId = account.protocol.id;
-    if (protoId != "prpl-irc" && protoId != "prpl-jabber" &&
-        protoId != "prpl-gtalk")
-      return true;
-
-    let name;
-    if (protoId == "prpl-irc")
-      name = values.getValue("channel");
-    else
-      name = values.getValue("room") + "@" + values.getValue("server");
-
-    let conv = Services.conversations.getConversationByNameAndAccount(name,
-                                                                      account,
-                                                                      true);
-    if (conv)
-      Conversations.focusConversation(conv);
-
-    if (document.getElementById("autojoin").checked) {
-      // "nick" for JS-XMPP, "handle" for libpurple prpls.
-      let nick = values.getValue("nick") || values.getValue("handle");
-      if (nick)
-        name += "/" + nick;
-
-      let prefBranch =
-        Services.prefs.getBranch("messenger.account." + account.id + ".");
-      let autojoin = [];
-      if (prefBranch.prefHasUserValue(autoJoinPref)) {
-        let prefValue =
-          prefBranch.getStringPref(autoJoinPref);
-        if (prefValue)
-          autojoin = prefValue.split(",");
-      }
-
-      if (!autojoin.includes(name)) {
-        autojoin.push(name);
-        prefBranch.setStringPref(autoJoinPref, autojoin.join(","));
-      }
-    }
-
-    return true;
-  }
-};
deleted file mode 100644
--- a/im/content/joinchat.xul
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/menulist.css" type="text/css"?>
-
-<!DOCTYPE window SYSTEM "chrome://instantbird/locale/joinChat.dtd">
-
-<dialog
-  id     = "joinChatDialog"
-  windowtype="Messenger:JoinChat"
-  title  = "&joinChatWindow.title;"
-  buttons= "accept,cancel"
-  xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-  onload = "joinChat.onload()"
-  ondialogaccept="joinChat.join()">
-  <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/joinchat.js"/>
-
-  <grid>
-    <columns>
-      <column/>
-      <column flex="1"/>
-      <column id="optionalcolumn" labeltxt="&optional.label;"/>
-    </columns>
-    <rows>
-      <row id="accountBox" align="center">
-        <label value="&account.label;" control="accountlist"/>
-        <menulist id="accountlist" onselect="joinChat.onAccountSelect();"/>
-      </row>
-      <row id="separatorRow1">
-        <separator class="thin"/>
-      </row>
-      <row id="nameBox" align="baseline">
-        <label value="&name.label;" control="name"/>
-        <textbox id="name"/>
-      </row>
-      <row id="separatorRow2">
-        <separator class="thin"/>
-      </row>
-      <row id="autojoinBox">
-        <spacer/>
-        <checkbox label="&autojoin.label;" accesskey="&autojoin.accesskey;" id="autojoin"/>
-      </row>
-    </rows>
-  </grid>
-</dialog>
deleted file mode 100644
--- a/im/content/jsConsoleOverlay.xul
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-
-<overlay id="jsConsoleOverlay"
-         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<window id="JSConsoleWindow">
-
-#include menus.xul.inc
-
-</window>
-
-</overlay>
deleted file mode 100644
--- a/im/content/jsTreeView.js
+++ /dev/null
@@ -1,235 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * This file contains a prototype object designed to make the implementation of
- * nsITreeViews in javascript simpler.  This object requires that consumers
- * override the _rebuild function.  This function must set the _rowMap object to
- * an array of objects fitting the following interface:
- *
- * readonly attribute string id - a unique identifier for the row/object
- * readonly attribute integer level - the hierarchy level of the row
- * attribute boolean open - whether or not this item's children are exposed
- * string getText(aColName) - return the text to display for this row in the
- *                            specified column
- * string getProperties() - return the css-selectors
- * attribute array children - return an array of child-objects also meeting this
- *                            interface
- */
-
-function PROTO_TREE_VIEW() {
-  this._tree = null;
-  this._rowMap = [];
-  this._persistOpenMap = [];
-}
-
-PROTO_TREE_VIEW.prototype = {
-  get rowCount() {
-    return this._rowMap.length;
-  },
-
-  /**
-   * CSS files will cue off of these.  Note that we reach into the rowMap's
-   * items so that custom data-displays can define their own properties
-   */
-  getCellProperties: function jstv_getCellProperties(aRow, aCol) {
-    return this._rowMap[aRow].getProperties(aCol);
-  },
-
-  /**
-   * The actual text to display in the tree
-   */
-  getCellText: function jstv_getCellText(aRow, aCol) {
-    return this._rowMap[aRow].getText(aCol.id);
-  },
-
-  /**
-   * The jstv items take care of assigning this when building children lists
-   */
-  getLevel: function jstv_getLevel(aIndex) {
-    return this._rowMap[aIndex].level;
-  },
-
-  /**
-   * This is easy since the jstv items assigned the _parent property when making
-   * the child lists
-   */
-  getParentIndex: function jstv_getParentIndex(aIndex) {
-    return this._rowMap.indexOf(this._rowMap[aIndex]._parent);
-  },
-
-  /**
-   * This is duplicative for our normal jstv views, but custom data-displays may
-   * want to do something special here
-   */
-  getRowProperties: function jstv_getRowProperties(aRow) {
-    return this._rowMap[aRow].getProperties();
-  },
-
-  /**
-   * If an item in our list has the same level and parent as us, it's a sibling
-   */
-  hasNextSibling: function jstv_hasNextSibling(aIndex, aNextIndex) {
-    let targetLevel = this._rowMap[aIndex].level;
-    for (let i = aNextIndex + 1; i < this._rowMap.length; i++) {
-      if (this._rowMap[i].level == targetLevel)
-        return true;
-      if (this._rowMap[i].level < targetLevel)
-        return false;
-    }
-    return false;
-  },
-
-  /**
-   * If we have a child-list with at least one element, we are a container.
-   */
-  isContainer: function jstv_isContainer(aIndex) {
-    return this._rowMap[aIndex].children.length > 0;
-  },
-
-  isContainerEmpty: function jstv_isContainerEmpty(aIndex) {
-    // If the container has no children, the container is empty.
-    return !this._rowMap[aIndex].children.length;
-  },
-
-  /**
-   * Just look at the jstv item here
-   */
-  isContainerOpen: function jstv_isContainerOpen(aIndex) {
-    return this._rowMap[aIndex].open;
-  },
-
-  isEditable: function jstv_isEditable(aRow, aCol) {
-    // We don't support editing rows in the tree yet.
-    return false;
-  },
-
-  isSeparator: function jstv_isSeparator(aIndex) {
-    // There are no separators in our trees
-    return false;
-  },
-
-  isSorted: function jstv_isSorted() {
-    // We do our own customized sorting
-    return false;
-  },
-
-  setTree: function jstv_setTree(aTree) {
-    this._tree = aTree;
-  },
-
-  recursivelyAddToMap: function jstv_recursivelyAddToMap(aChild, aNewIndex) {
-    // When we add sub-children, we're going to need to increase our index
-    // for the next add item at our own level.
-    let currentCount = this._rowMap.length;
-    if (aChild.children.length && aChild.open) {
-      for (let [i, child] of Array.from(this._rowMap[aNewIndex].children).entries()) {
-        let index = aNewIndex + i + 1;
-        this._rowMap.splice(index, 0, child);
-        aNewIndex += this.recursivelyAddToMap(child, index);
-      }
-    }
-    return this._rowMap.length - currentCount;
-  },
-
-  /**
-   * Opens or closes a container with children.  The logic here is a bit hairy, so
-   * be very careful about changing anything.
-   */
-  toggleOpenState: function jstv_toggleOpenState(aIndex) {
-
-    // Ok, this is a bit tricky.
-    this._rowMap[aIndex]._open = !this._rowMap[aIndex].open;
-
-    if (!this._rowMap[aIndex].open) {
-      // We're closing the current container.  Remove the children
-
-      // Note that we can't simply splice out children.length, because some of
-      // them might have children too.  Find out how many items we're actually
-      // going to splice
-      let level = this._rowMap[aIndex].level;
-      let row = aIndex + 1;
-      while (row < this._rowMap.length && this._rowMap[row].level > level) {
-        row++;
-      }
-      let count = row - aIndex - 1;
-      this._rowMap.splice(aIndex + 1, count);
-
-      // Remove us from the persist map
-      let index = this._persistOpenMap.indexOf(this._rowMap[aIndex].id);
-      if (index != -1)
-        this._persistOpenMap.splice(index, 1);
-
-      // Notify the tree of changes
-      if (this._tree) {
-        this._tree.rowCountChanged(aIndex + 1, -count);
-      }
-    } else {
-      // We're opening the container.  Add the children to our map
-
-      // Note that these children may have been open when we were last closed,
-      // and if they are, we also have to add those grandchildren to the map
-      let oldCount = this._rowMap.length;
-      this.recursivelyAddToMap(this._rowMap[aIndex], aIndex);
-
-      // Add this container to the persist map
-      let id = this._rowMap[aIndex].id;
-      if (!this._persistOpenMap.includes(id))
-        this._persistOpenMap.push(id);
-
-      // Notify the tree of changes
-      if (this._tree)
-        this._tree.rowCountChanged(aIndex + 1, this._rowMap.length - oldCount);
-    }
-
-    // Invalidate the toggled row, so that the open/closed marker changes
-    if (this._tree)
-      this._tree.invalidateRow(aIndex);
-  },
-
-  // We don't implement any of these at the moment
-  canDrop: function jstv_canDrop(aIndex, aOrientation) {},
-  drop: function jstv_drop(aRow, aOrientation) {},
-  performAction: function jstv_performAction(aAction) {},
-  performActionOnCell: function jstv_performActionOnCell(aAction, aRow, aCol) {},
-  performActionOnRow: function jstv_performActionOnRow(aAction, aRow) {},
-  selectionChanged: function jstv_selectionChanged() {},
-  setCellText: function jstv_setCellText(aRow, aCol, aValue) {},
-  setCellValue: function jstv_setCellValue(aRow, aCol, aValue) {},
-  getCellValue: function jstv_getCellValue(aRow, aCol) {},
-  getColumnProperties: function jstv_getColumnProperties(aCol) { return ""; },
-  getImageSrc: function jstv_getImageSrc(aRow, aCol) {},
-  getProgressMode: function jstv_getProgressMode(aRow, aCol) {},
-  cycleCell: function jstv_cycleCell(aRow, aCol) {},
-  cycleHeader: function jstv_cycleHeader(aCol) {},
-
-  _tree: null,
-
-  /**
-   * An array of jstv items, where each item corresponds to a row in the tree
-   */
-  _rowMap: null,
-
-  /**
-   * This is a javascript map of which containers we had open, so that we can
-   * persist their state over-time.  It is designed to be used as a JSON object.
-   */
-  _persistOpenMap: null,
-
-  _restoreOpenStates: function jstv__restoreOpenStates() {
-    // Note that as we iterate through here, .length may grow
-    for (let i = 0; i < this._rowMap.length; i++) {
-      if (this._persistOpenMap.includes(this._rowMap[i].id))
-        this.toggleOpenState(i);
-    }
-  },
-
-  QueryInterface: function QueryInterface(aIID) {
-    if (aIID.equals(Ci.nsITreeView) ||
-        aIID.equals(Ci.nsISupports))
-      return this;
-
-    throw Cr.NS_ERROR_NO_INTERFACE;
-  }
-};
deleted file mode 100644
--- a/im/content/macgestures.js
+++ /dev/null
@@ -1,218 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-// Shamelessly taken from the implementation in browser/base/content/browser.js
-
-var gGestureSupport = {
-  _tabs: null,
-  _lastSelectedTab: null,
-
-  load: function GS_load() {
-    gGestureSupport.init(true);
-
-    let conversations = document.getElementById("conversations");
-    if (conversations) {
-      let tabs = conversations.tabContainer;
-      let selectHandler = function() {
-        gGestureSupport._lastSelectedTab = gGestureSupport._selectedTab;
-        gGestureSupport._selectedTab = this.selectedItem;
-      };
-      tabs.addEventListener("select", selectHandler);
-      gGestureSupport._selectedTab = tabs.selectedItem;
-      gGestureSupport._tabs = tabs;
-    }
-  },
-
-  /**
-   * Add or remove mouse gesture event listeners
-   *
-   * @param aAddListener
-   *        True to add/init listeners and false to remove/uninit
-   */
-  init: function GS_init(aAddListener) {
-    const gestureEvents = ["SwipeGesture",
-      "MagnifyGestureStart", "MagnifyGestureUpdate", "MagnifyGesture",
-      "RotateGestureStart", "RotateGestureUpdate", "RotateGesture"];
-
-    let addRemove = aAddListener ? window.addEventListener :
-      window.removeEventListener;
-
-    for (let event of gestureEvents)
-      addRemove("Moz" + event, this, true);
-  },
-
-  /**
-   * Dispatch events based on the type of mouse gesture event. For now, make
-   * sure to stop propagation of every gesture event so that web content cannot
-   * receive gesture events.
-   *
-   * @param aEvent
-   *        The gesture event to handle
-   */
-  handleEvent: function GS_handleEvent(aEvent) {
-    aEvent.stopPropagation();
-
-    // Create a preference object with some defaults
-    let def = (aThreshold, aLatched) =>
-      ({ threshold: aThreshold, latched: !!aLatched });
-
-    switch (aEvent.type) {
-      case "MozSwipeGesture":
-        this.onSwipe(aEvent);
-        break;
-      case "MozMagnifyGestureStart":
-        this._setupGesture(aEvent, "pinch", def(150, 1), "out", "in");
-        break;
-      case "MozRotateGestureStart":
-        this._setupGesture(aEvent, "twist", def(25, 0), "right", "left");
-        break;
-      case "MozMagnifyGestureUpdate":
-      case "MozRotateGestureUpdate":
-        this._doUpdate(aEvent);
-        break;
-    }
-  },
-
-  /**
-   * Called at the start of "pinch" and "twist" gestures to setup all of the
-   * information needed to process the gesture
-   *
-   * @param aEvent
-   *        The continual motion start event to handle
-   * @param aGesture
-   *        Name of the gesture to handle
-   * @param aPref
-   *        Preference object with the names of preferences and defaults
-   * @param aInc
-   *        Command to trigger for increasing motion (without gesture name)
-   * @param aDec
-   *        Command to trigger for decreasing motion (without gesture name)
-   */
-  _setupGesture: function GS__setupGesture(aEvent, aGesture, aPref, aInc, aDec) {
-    // Keep track of the total deltas and latching behavior
-    let offset = 0;
-    let latchDir = aEvent.delta > 0 ? 1 : -1;
-    let isLatched = false;
-
-    // Create the update function here to capture closure state
-    this._doUpdate = function GS__doUpdate(aEvent) {
-      // Update the offset with new event data
-      offset += aEvent.delta;
-
-      // Check if the cumulative deltas exceed the threshold
-      if (Math.abs(offset) > aPref["threshold"]) {
-        // Trigger the action if we don't care about latching; otherwise, make
-        // sure either we're not latched and going the same direction of the
-        // initial motion; or we're latched and going the opposite way
-        let sameDir = (latchDir ^ offset) >= 0;
-        if (!aPref["latched"] || (isLatched ^ sameDir)) {
-          this._doAction(aEvent, [aGesture, offset > 0 ? aInc : aDec]);
-
-          // We must be getting latched or leaving it, so just toggle
-          isLatched = !isLatched;
-        }
-
-        // Reset motion counter to prepare for more of the same gesture
-        offset = 0;
-      }
-    };
-
-    // The start event also contains deltas, so handle an update right away
-    this._doUpdate(aEvent);
-  },
-
-  /**
-   * Determine what action to do for the gesture based on which keys are
-   * pressed and which commands are set
-   *
-   * @param aEvent
-   *        The original gesture event to convert into a fake click event
-   * @param aGesture
-   *        Array of gesture name parts (to be joined by periods)
-   * @return Name of the command found for the event's keys and gesture. If no
-   *         command is found, no value is returned (undefined).
-   */
-  _doAction: function GS__doAction(aEvent, aGesture) {
-    let gesture = aGesture.join("-");
-    switch (gesture) {
-      case "pinch-out":
-        document.getElementById("cmd_textZoomEnlarge").doCommand();
-        break;
-      case "pinch-in":
-        document.getElementById("cmd_textZoomReduce").doCommand();
-        break;
-      case "twist-left":
-        if (this._tabs)
-          this._tabs.selectedIndex--;
-        break;
-      case "twist-right":
-        if (this._tabs)
-          this._tabs.selectedIndex++;
-        break;
-      case "swipe-down":
-        // This gesture isn't available if there's no browser.
-        if (!getBrowser())
-          break;
-        if (aEvent.originalTarget.ownerDocument == getBrowser().contentDocument)
-          getBrowser().contentWindow.focus();
-        if ("scrollToNextSection" in getBrowser())
-          getBrowser().scrollToNextSection();
-        else
-          goDoCommand("cmd_scrollBottom");
-        break;
-      case "swipe-up":
-        // This gesture isn't available if there's no browser.
-        if (!getBrowser())
-          break;
-        if (aEvent.originalTarget.ownerDocument == getBrowser().contentDocument)
-          getBrowser().contentWindow.focus();
-        if ("scrollToPreviousSection" in getBrowser())
-          getBrowser().scrollToPreviousSection();
-        else
-          goDoCommand("cmd_scrollTop");
-        break;
-      case "swipe-left":
-      case "swipe-right":
-        var newIndex = -1;
-        if (this._lastSelectedTab)
-          newIndex = this._tabs.getIndexOfItem(this._lastSelectedTab);
-        if (newIndex == -1)
-          newIndex =
-            gesture == "swipe-right" ? this._tabs.childNodes.length - 1 : 0;
-        this._tabs.selectedIndex = newIndex;
-        break;
-      default:
-        dump("mac gesture: "+ gesture +"\n");
-    }
-  },
-
-  /**
-   * Convert continual motion events into an action if it exceeds a threshold
-   * in a given direction. This function will be set by _setupGesture to
-   * capture state that needs to be shared across multiple gesture updates.
-   *
-   * @param aEvent
-   *        The continual motion update event to handle
-   */
-  _doUpdate: function(aEvent) {},
-
-  /**
-   * Convert the swipe gesture into a browser action based on the direction
-   *
-   * @param aEvent
-   *        The swipe event to handle
-   */
-  onSwipe: function GS_onSwipe(aEvent) {
-    // Figure out which one (and only one) direction was triggered
-    for (let dir of ["UP", "RIGHT", "DOWN", "LEFT"]) {
-      if (aEvent.direction == aEvent["DIRECTION_" + dir]) {
-        this._doAction(aEvent, ["swipe", dir.toLowerCase()]);
-        return;
-      }
-    }
-  }
-};
-
-this.addEventListener("load", gGestureSupport.load);
deleted file mode 100644
--- a/im/content/menus-mac.xul
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %brandDTD;
-]>
-<overlay id="menusOverlayMac"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <commandset id="maincommandset">
-    <command id="cmd_contacts"
-             oncommand="if (window.location.href == 'chrome://instantbird/content/blist.xul')
-                          window.close();
-                        else
-                          Core.showContacts();"/>
-  </commandset>
-
-  <keyset id="mainkeyset">
-    <key id="contactskey" command="cmd_contacts"
-         key="&contacts.commandkey;" modifiers="accel,shift"/>
-  </keyset>
-
-  <!-- adds the onpopupshowing attributes -->
-  <menupopup id="setStatusMenupopup"
-             onpopupshowing="menus.onStatusPopupShowing();"/>
-  <menupopup id="toolsMenuPopup"
-             onpopupshowing="menus.displayUpdateStatus();"/>
-
-  <menuitem id="menu_FileQuitItem"
-            label="&quitApplicationCmdMac.label;"
-            key="key_quitApplication"/>
-
-  <!-- bottom of help menu; note that updatesMenuItem and updatesSep are
-     - moved into the tools menu, so these have to come first
-     -->
-  <menupopup id="helpMenuPopup" onpopupshowing=""/>
-  <menuitem id="updatesMenuItem" removeelement="true"/>
-  <menuseparator id="updatesSep" removeelement="true"/>
-
-  <!-- bottom of the tools menu -->
-  <menuseparator id="prefSep" removeelement="true"/>
-  <menuitem id="menu_preferences" removeelement="true"/>
-  <menupopup id="toolsMenuPopup">
-    <menuitem id="contactsMenuItem" insertbefore="addonsMenuItem"
-              label="&contacts.label;" accesskey="&contacts.accesskey;"
-              command="cmd_contacts" key="contactskey"/>
-    <menuseparator id="updatesSep"/>
-    <menuitem id="updatesMenuItem"
-              label="&checkForUpdates;"
-              oncommand="menus.updates()"/>
-  </menupopup>
-
-  <menu id="helpMenu" hidden="true"/>
-
-  <popupset id="mainPopupSet">
-    <!-- nsMenuBarX hides these and uses them to build the Application menu. -->
-    <menupopup id="menu_ToolsPopup">
-      <menuitem id="menu_preferences"
-                label="&preferencesCmdMac.label;"
-                key="key_preferencesCmdMac"
-                oncommand="menus.preferences();"/>
-      <menuitem id="menu_mac_services"
-                label="&servicesMenuMac.label;"/>
-      <menuitem id="menu_mac_hide_app"
-                label="&hideThisAppCmdMac.label;"
-                key="key_hideThisAppCmdMac"/>
-      <menuitem id="menu_mac_hide_others"
-                label="&hideOtherAppsCmdMac.label;"
-                key="key_hideOtherAppsCmdMac"/>
-      <menuitem id="menu_mac_show_all"
-                label="&showAllAppsCmdMac.label;"/>
-    </menupopup>
-  </popupset>
-
-  <!-- These are used to build the Application menu under Cocoa widgets -->
-  <keyset id="mainkeyset">
-    <key id="key_preferencesCmdMac"
-         key="&preferencesCmdMac.commandkey;"
-         modifiers="accel"/>
-    <key id="key_hideThisAppCmdMac"
-         key="&hideThisAppCmdMac.commandkey;"
-         modifiers="accel"/>
-    <key id="key_hideOtherAppsCmdMac"
-         key="&hideOtherAppsCmdMac.commandkey;"
-         modifiers="accel,alt"/>
-  </keyset>
-
-</overlay>
deleted file mode 100644
--- a/im/content/menus-unix.xul
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %brandDTD;
-]>
-<overlay id="menusOverlayUnix"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <menuitem id="menu_FileQuitItem"
-            accesskey="&quitApplicationCmd.accesskey;"
-            key="key_quitApplication"/>
-
-  <menuitem id="menu_preferences"
-            label="&preferencesCmdUnix.label;"
-            accesskey="&preferencesCmdUnix.accesskey;"/>
-
-</overlay>
-
deleted file mode 100644
--- a/im/content/menus-win.xul
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %brandDTD;
-]>
-<overlay id="menusOverlayWin"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <key id="key_quitApplication" removeelement="true"/>
-
-  <menuitem id="menu_FileQuitItem"
-            label="&quitApplicationCmdWin.label;"
-            accesskey="&quitApplicationCmdWin.accesskey;"/>
-
-  <menu id="helpMenu" label="&helpWin.menu;" accesskey="&helpWin.accesskey;"/>
-
-</overlay>
-
deleted file mode 100644
--- a/im/content/menus.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var addBuddyWindow = "chrome://instantbird/content/addbuddy.xul";
-var joinChatWindow = "chrome://instantbird/content/joinchat.xul";
-var aboutWindow = "chrome://instantbird/content/aboutDialog.xul";
-
-if (!("Services" in window))
-  ChromeUtils.import("resource:///modules/imServices.jsm");
-if (!("Core" in window))
-  ChromeUtils.import("resource:///modules/ibCore.jsm");
-
-var menus = {
-  supportsCommand: aCmd =>
-    aCmd == "cmd_addbuddy" || aCmd == "cmd_joinchat" || aCmd == "cmd_newtab",
-  isCommandEnabled: function(aCmd) {
-    let enumerator = Services.accounts.getAccounts();
-    while (enumerator.hasMoreElements()) {
-      let acc = enumerator.getNext();
-      if (acc.connected &&
-          (aCmd == "cmd_addbuddy" || aCmd == "cmd_newtab" || acc.canJoinChat))
-        return true;
-    }
-    return false;
-  },
-  doCommand: function(aCmd) {
-    if (aCmd == "cmd_joinchat")
-      this.joinChat();
-    else if (aCmd == "cmd_addbuddy")
-      this.addBuddy();
-    else if (aCmd == "cmd_newtab") {
-      if (!("Conversations" in window))
-        ChromeUtils.import("resource:///modules/imWindows.jsm");
-      Conversations.showNewTab();
-    }
-  },
-  onEvent: function(aEventName) {},
-
-  about: function menu_about() {
-    Core.showWindow("Messenger:About", aboutWindow, "About",
-                    "chrome,resizable=no,minimizable=no,centerscreen");
-  },
-
-  accounts: function menu_accounts() {
-    Core.showAccounts();
-  },
-
-  preferences: function menu_preferences() {
-    Core.showPreferences();
-  },
-
-  addons: function menu_addons() {
-    Core.showAddons();
-  },
-
-  errors: function debug_errors() {
-    let { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
-    let { HUDService } = require("devtools/client/webconsole/hudservice");
-    HUDService.openBrowserConsoleOrFocus();
-  },
-
-  updates: function menu_updates() {
-    Core.showUpdates();
-  },
-
-  displayUpdateStatus: function menu_displayUpdateStatus() {
-    // copied from buildHelpMenu in mozilla/browser/base/content/utilityOverlay.js
-    var updates =
-      Cc["@mozilla.org/updates/update-service;1"]
-        .getService(Ci.nsIApplicationUpdateService);
-    var um =
-      Cc["@mozilla.org/updates/update-manager;1"]
-        .getService(Ci.nsIUpdateManager);
-
-    // Disable the UI if the update enabled pref has been locked by the
-    // administrator or if we cannot update for some other reason
-    var checkForUpdates = document.getElementById("updatesMenuItem");
-    var canCheckForUpdates = updates.canCheckForUpdates;
-    checkForUpdates.setAttribute("disabled", !canCheckForUpdates);
-    if (!canCheckForUpdates)
-      return;
-
-    var strings =
-      Services.strings
-              .createBundle("chrome://instantbird/locale/updates.properties");
-    var activeUpdate = um.activeUpdate;
-
-    // If there's an active update, substitute its name into the label
-    // we show for this item, otherwise display a generic label.
-    function getStringWithUpdateName(key) {
-      if (activeUpdate && activeUpdate.name)
-        return strings.formatStringFromName(key, [activeUpdate.name], 1);
-      return strings.GetStringFromName(key + "Fallback");
-    }
-
-    // By default, show "Check for Updates..."
-    var key = "default";
-    if (activeUpdate) {
-      switch (activeUpdate.state) {
-      case "downloading":
-        // If we're downloading an update at present, show the text:
-        // "Downloading Instantbird x.x..." otherwise we're paused, and show
-        // "Resume Downloading Instantbird x.x..."
-        key = updates.isDownloading ? "downloading" : "resume";
-        break;
-      case "pending":
-        // If we're waiting for the user to restart, show: "Apply Downloaded
-        // Updates Now..."
-        key = "pending";
-        break;
-      }
-    }
-    checkForUpdates.label = getStringWithUpdateName("updatesItem_" + key);
-    checkForUpdates.accessKey =
-      strings.GetStringFromName("updatesItem_" + key + ".accesskey");
-    if (um.activeUpdate && updates.isDownloading)
-      checkForUpdates.setAttribute("loading", "true");
-    else
-      checkForUpdates.removeAttribute("loading");
-  },
-
-  updateFileMenuitems: function menu_updateFileMenuitems() {
-    goUpdateCommand("cmd_joinchat");
-    goUpdateCommand("cmd_addbuddy");
-    goUpdateCommand("cmd_newtab");
-  },
-
-  openDialog: function menu_openDialog(aWindowType, aURL) {
-    let features = "chrome,modal,titlebar,centerscreen";
-#ifdef XP_MACOSX
-    let hiddenWindowUrl =
-      Services.prefs.getCharPref("browser.hiddenWindowChromeURL");
-    if (window.location.href == hiddenWindowUrl) {
-      Core.showWindow(aWindowType, aURL, "", features);
-      return;
-    }
-#endif
-    window.openDialog(aURL, "", features);
-  },
-  addBuddy: function menu_addBuddy() {
-    this.openDialog("Messenger:Addbuddy", addBuddyWindow);
-  },
-
-  joinChat: function menu_joinChat() {
-    this.openDialog("Messenger:JoinChat", joinChatWindow);
-  },
-
-  checkCurrentStatusType: function menu_checkCurrentStatusType(aItems) {
-    if (!("Status" in window))
-      ChromeUtils.import("resource:///modules/imStatusUtils.jsm");
-    let status = Status.toAttribute(Services.core.globalUserStatus.statusType);
-    if (status == "away")
-      status = "unavailable";
-
-    aItems.forEach(function (aId) {
-      let elt = document.getElementById(aId);
-      if (elt.getAttribute("status") == status)
-        elt.setAttribute("checked", "true");
-      else
-        elt.removeAttribute("checked");
-    });
-  },
-
-  onStatusPopupShowing: function menu_onStatusPopupShowing() {
-    this.checkCurrentStatusType(["statusAvailable",
-                                 "statusUnavailable",
-                                 "statusOffline"]);
-  },
-
-  setStatus: function menu_setStatus(aEvent) {
-    let status = aEvent.originalTarget.getAttribute("status");
-    if (!status)
-      return; // is this really possible?
-
-    let blist = Services.wm.getMostRecentWindow("Messenger:blist");
-    if (blist) {
-      blist.focus();
-      blist.buddyList.startEditStatus(status);
-    }
-    else {
-      let us = Services.core.globalUserStatus;
-      us.setStatus(Status.toFlag(status), us.statusText);
-    }
-  }
-};
-
-window.addEventListener("load", function() { this.controllers.insertControllerAt(0, menus); });
deleted file mode 100644
--- a/im/content/menus.xul
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xml-stylesheet href="chrome://instantbird/skin/menus.css" type="text/css"?>
-#ifdef XP_WIN
-<?xul-overlay href="chrome://instantbird/content/menus-win.xul"?>
-#elifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus-mac.xul"?>
-#else
-<?xul-overlay href="chrome://instantbird/content/menus-unix.xul"?>
-#endif
-
-<!DOCTYPE overlay [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %brandDTD;
-]>
-<overlay id="menusOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/menus.js"/>
-
-  <commandset id="maincommandset">
-    <command id="accountmanager" oncommand="menus.accounts()"/>
-    <command id="cmd_quitApplication" oncommand="goQuitApplication()"/>
-    <command id="cmd_joinchat" oncommand="goDoCommand('cmd_joinchat');"/>
-    <command id="cmd_addbuddy" oncommand="goDoCommand('cmd_addbuddy');"/>
-    <command id="cmd_newtab" oncommand="goDoCommand('cmd_newtab');"/>
-    <command id="cmd_addons" oncommand="menus.addons()"/>
-  </commandset>
-
-  <keyset id="mainkeyset">
-    <key id="accountsetup" key="&account.commandkey;" command="accountmanager" modifiers="accel,shift"/>
-    <key id="errorConsoleKey" key="&errorConsoleCmd.commandkey;" oncommand="menus.errors();" modifiers="accel,shift"/>
-    <key id="key_quitApplication" key="&quitApplicationCmdMac.key;" command="cmd_quitApplication" modifiers="accel"/>
-    <key id="joinChatkey" key="&joinChat.commandkey;" command="cmd_joinchat" modifiers="accel"/>
-    <key id="addBuddykey" key="&addContact.commandkey;" command="cmd_addbuddy" modifiers="accel"/>
-    <key id="newtabkey" key="&newtab.commandkey;" command="cmd_newtab" modifiers="accel"/>
-    <key id="addonskey" key="&addonManager.commandkey;" command="cmd_addons" modifiers="accel"/>
-  </keyset>
-
-  <menubar id="blistMenubar">
-    <menu label="&file.menu;" id="fileMenu" accesskey="&file.accesskey;" insertbefore="menu_edit">
-      <menupopup id="fileMenuPopup" onpopupshowing="menus.updateFileMenuitems();">
-        <menuitem id="addBuddyMenuItem" label="&addContact;" command="cmd_addbuddy" key="addBuddykey" accesskey="&addContact.accesskey;"/>
-        <menuitem id="newTabMenuItem" label="&newtab;" command="cmd_newtab" key="newtabkey" accesskey="&newtab.accesskey;"/>
-        <menuitem id="joinChatMenuItem" label="&joinChat;" command="cmd_joinchat" key="joinChatkey" accesskey="&joinChat.accesskey;"/>
-        <menuseparator/>
-        <menu id="setStatusTo" label="&setStatusTo;" oncommand="menus.setStatus(event);" accesskey="&setStatusTo.accesskey;" >
-          <menupopup id="setStatusMenupopup"> <!-- has onpopupshowing on mac -->
-            <menuitem id="statusAvailable" status="available" label="&available;" accesskey="&available.accesskey;" class="menuitem-iconic"/>
-            <menuitem id="statusUnavailable" status="unavailable" label="&unavailable;" accesskey="&unavailable.accesskey;" class="menuitem-iconic"/>
-            <menuseparator id="statusOfflineSeparator"/>
-            <menuitem id="statusOffline" status="offline" label="&offline;" accesskey="&offline.accesskey;" class="menuitem-iconic"/>
-          </menupopup>
-        </menu>
-        <menuseparator id="menu_FileQuitSeparator"/>
-        <!-- menu_FileQuitItem modified on all three platforms via overlays -->
-        <menuitem id="menu_FileQuitItem"
-                  label="&quitApplicationCmd.label;"
-                  command="cmd_quitApplication"/>
-      </menupopup>
-    </menu>
-    <menu label="&tools.menu;" id="toolsMenu" accesskey="&tools.accesskey;">
-      <menupopup id="toolsMenuPopup"> <!-- has onpopupshowing on mac -->
-        <menuitem id="accountsMenuItem" label="&accountManager;" command="accountmanager" key="accountsetup" accesskey="&account.accesskey;"/>
-        <menuitem id="addonsMenuItem" label="&addonManager;" command="cmd_addons" key="addonskey" accesskey="&addonManager.accesskey;"/>
-        <menuseparator/>
-        <menuitem id="errorConsoleMenuItem" label="&errorConsoleCmd.label;" oncommand="menus.errors()" key="errorConsoleKey" accesskey="&errorConsoleCmd.accesskey;"/>
-        <menuseparator id="prefSep"/>
-        <menuitem id="menu_preferences"
-                  label="&preferencesCmd.label;"
-                  accesskey="&preferencesCmd.accesskey;"
-                  oncommand="menus.preferences();"/>
-      </menupopup>
-    </menu>
-#ifdef XP_MACOSX
-    <!-- Mac window menu -->
-#include ../../mozilla/toolkit/content/macWindowMenu.inc
-#endif
-    <menu label="&help.menu;" id="helpMenu" accesskey="&help.accesskey;">
-#ifdef MOZ_UPDATER
-      <menupopup id="helpMenuPopup" onpopupshowing="menus.displayUpdateStatus();">
-        <menuitem id="updatesMenuItem" label="&checkForUpdates;" oncommand="menus.updates()"/>
-        <menuseparator id="updatesSep"/>
-#else
-      <menupopup id="helpMenuPopup">
-#endif
-        <menuitem id="aboutName" label="&about.menu;" accesskey="&about.accesskey;" oncommand="menus.about()"/>
-      </menupopup>
-    </menu>
-  </menubar>
-
-</overlay>
deleted file mode 100644
--- a/im/content/menus.xul.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Note instantbird.xul contains a modified copy of this file that
-# should be kept in sync.
-  <commandset id="maincommandset"/>
-  <keyset id="mainkeyset"/>
-  <menubar id="blistMenubar"/>
-  <popupset id="mainPopupSet"/>
deleted file mode 100644
--- a/im/content/moz.build
+++ /dev/null
@@ -1,19 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
-
-# defines used for preference window files and license
-for var in ('MOZ_APP_NAME', 'MOZ_MACBUNDLE_NAME', 'mozreltopsrcdir'):
-    DEFINES[var] = CONFIG[var]
-
-#if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'mac', 'cocoa'):
-#    DEFINES['HAVE_SHELL_SERVICE'] = 1
-
-if CONFIG['MOZ_UPDATER']:
-    DEFINES['MOZ_UPDATER'] = 1
-
-DEFINES['APP_LICENSE_BLOCK'] = '%s/overrides/app-license.html' % SRCDIR
-
deleted file mode 100644
--- a/im/content/newtab.xml
+++ /dev/null
@@ -1,559 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % newtabDTD SYSTEM "chrome://instantbird/locale/newtab.dtd" >
-  %newtabDTD;
-]>
-
-<bindings id="newtabBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-  <binding id="newtab">
-    <resources>
-      <stylesheet src="chrome://instantbird/skin/newtab.css"/>
-      <stylesheet src="chrome://instantbird/skin/richlistbox.css"/>
-    </resources>
-
-    <content>
-      <xul:vbox flex="1">
-        <xul:toolbar class="newtab-toolbar">
-          <xul:textbox class="filterbox" anonid="filterbox" type="search"
-                       placeholder="&filterbox.placeholder;" flex="1"/>
-        </xul:toolbar>
-        <xul:notificationbox anonid="newtab-notifications" flex="1">
-          <xul:richlistbox anonid="newtab-listbox" class="newtab-listbox" flex="1"/>
-        </xul:notificationbox>
-      </xul:vbox>
-    </content>
-
-    <implementation implements="nsIObserver">
-      <property name="statsService" readonly="true">
-        <getter>
-        <![CDATA[
-          if (!this._statsService) {
-            this._statsService = Cc["@instantbird.org/conv-stats-service;1"]
-                                   .getService(Ci.ibIConvStatsService);
-          }
-          return this._statsService;
-        ]]>
-        </getter>
-      </property>
-
-      <property name="filterbox" readonly="true">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "filterbox");
-        </getter>
-      </property>
-
-      <property name="listbox" readonly="true">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "newtab-listbox");
-        </getter>
-      </property>
-
-      <!-- Array version of this.listbox.childNodes. -->
-      <field name="listItems">[]</field>
-
-      <!-- If a new conversation tab is opened and then closed without
-           switching away, we restore focus to the previous tab. -->
-      <field name="previousTab">null</field>
-
-      <property name="tab">
-        <getter>
-        <![CDATA[
-          return this._tab;
-        ]]>
-        </getter>
-        <setter>
-        <![CDATA[
-          this._tab = val;
-          this._tab.setAttribute("label",
-            Services.strings.createBundle("chrome://instantbird/locale/newtab.properties")
-                    .GetStringFromName("newtab.label"));
-          // When our tab is set, the tab browser has not yet updated its
-          // current tab to ours, so we can use it to store the previous tab.
-          this.previousTab = window.getTabBrowser().mCurrentTab;
-        ]]>
-        </setter>
-      </property>
-
-      <destructor>
-      <![CDATA[
-        this.destroy();
-      ]]>
-      </destructor>
-
-      <method name="focus">
-        <body>
-        <![CDATA[
-          this.filterbox.focus();
-        ]]>
-        </body>
-      </method>
-
-      <method name="onResize">
-        <body>
-        <![CDATA[
-          this.addMoreItems();
-        ]]>
-        </body>
-      </method>
-
-      <method name="onSelect">
-        <body>
-        <![CDATA[
-          this.refresh();
-        ]]>
-        </body>
-      </method>
-
-      <method name="switchingAwayFromPanel">
-        <body>
-        <![CDATA[
-          this.previousTab = null;
-        ]]>
-        </body>
-      </method>
-
-      <!-- Maintains computed number of items to display. Incremented when the user
-           scrolls near the bottom of the list if we have more conversations. -->
-      <field name="numberOfItemsToDisplay">0</field>
-      <property name="hasMoreConversations" readonly="true">
-        <getter>
-        <![CDATA[
-          return this.filteredConvs && this.filteredConvs.hasMoreElements();
-        ]]>
-        </getter>
-      </property>
-      <!-- While scrolling, we add more items when there are three items left that
-           aren't displayed (the last visible item is fourth from the end of the list). -->
-      <field name="kAddMoreItemsThreshold" readonly="true">3</field>
-      <!-- Try to add this many items when scrolling past the threshold. -->
-      <field name="kNumItemsIncrement" readonly="true">10</field>
-
-      <!-- Increments numberOfItemsToDisplay and calls refresh(). Used on scrolling/resizing. -->
-      <method name="addMoreItems">
-        <body>
-        <![CDATA[
-          if (!this.hasMoreConversations)
-            return;
-          let lastVisibleIndex = this.listbox.getIndexOfFirstVisibleRow() +
-                                   this.listbox.getNumberOfVisibleRows() - 1;
-          // Increment numberOfItemsToDisplay if lastVisibleIndex exceeds the threshold.
-          if (lastVisibleIndex >= this.listItems.length - this.kAddMoreItemsThreshold) {
-            let maxNumberOfItemsToDisplay =
-              this.numberOfItemsToDisplay + this.kNumItemsIncrement;
-            while (this.hasMoreConversations &&
-                   this.listItems.length < maxNumberOfItemsToDisplay) {
-              this.pushListItem().build(this.getNextConv());
-              this.numberOfItemsToDisplay++;
-            }
-          }
-        ]]>
-        </body>
-      </method>
-
-      <method name="getNextConv">
-        <body>
-        <![CDATA[
-          if (!this.hasMoreConversations)
-            return null;
-          return this.filteredConvs.getNext()
-                     .QueryInterface(Ci.ibIPossibleConversation);
-        ]]>
-        </body>
-      </method>
-
-      <!-- Remove observers when closing tab. -->
-      <method name="destroy">
-        <body>
-        <![CDATA[
-          if (this._destroyed)
-            return;
-          if (this.previousTab && !window.getTabBrowser()._windowIsClosing)
-            window.getTabBrowser().selectedTab = this.previousTab;
-          this.statsService.removeObserver(this);
-          this._destroyed = true;
-        ]]>
-        </body>
-      </method>
-
-      <method name="finishImport">
-        <parameter name="aOtherNewTab"/>
-        <body>
-        <![CDATA[
-          let filterbox = this.filterbox;
-          let otherFilterbox = aOtherNewTab.filterbox;
-          filterbox.value = otherFilterbox.value;
-          filterbox.selectionStart = otherFilterbox.selectionStart;
-          filterbox.selectionEnd = otherFilterbox.selectionEnd;
-          const kFieldsToImport = ["filteredConvs", "numberOfItemsToDisplay",
-                                   "_prevFilterTxt"];
-          for (let field of kFieldsToImport)
-            this[field] = aOtherNewTab[field];
-          for (let item of aOtherNewTab.listItems)
-            this.pushListItem().build(item.target);
-          this.listbox.selectedIndex = aOtherNewTab.listbox.selectedIndex;
-          this.listbox.scrollToIndex(aOtherNewTab.listbox.getIndexOfFirstVisibleRow());
-          this.addListeners();
-        ]]>
-        </body>
-      </method>
-
-      <!-- This is separated from the constructor because we don't want to init
-           when being imported from another window. -->
-      <method name="init">
-        <body>
-        <![CDATA[
-          this._forceRefresh = true;
-          this.refresh();
-          this.addListeners();
-        ]]>
-        </body>
-      </method>
-
-      <method name="addListeners">
-        <body>
-        <![CDATA[
-          this.filterbox.addEventListener("keypress", this.refresh.bind(this));
-          this.listbox.addEventListener("focus", function(aEvent) {
-            let listbox = this.listbox;
-            if (listbox.selectedIndex == -1)
-              listbox.selectedIndex = listbox.getIndexOfFirstVisibleRow();
-          }.bind(this));
-          this.listbox.addEventListener("scroll", this.addMoreItems.bind(this));
-          this.statsService.addObserver(this);
-        ]]>
-        </body>
-      </method>
-
-      <!-- Dispatch a call to _delayedRefresh, to avoid multiple consecutive calls. -->
-      <method name="refresh">
-        <body>
-        <![CDATA[
-          if (this._pendingRefreshCall)
-            return;
-          this._pendingRefreshCall = true;
-          Services.tm.mainThread.dispatch(this._delayedRefresh.bind(this),
-            Ci.nsIEventTarget.DISPATCH_NORMAL);
-        ]]>
-        </body>
-      </method>
-
-      <field name="_prevFilterTxt">null</field>
-      <method name="_delayedRefresh">
-        <body>
-        <![CDATA[
-          this._pendingRefreshCall = false;
-          // Don't do anything if the tab has been removed.
-          if (this._destroyed)
-            return;
-          let filterTxt = this.filterbox.value.toLowerCase();
-          if (filterTxt == this._prevFilterTxt && !this._forceRefresh)
-            return;
-          this.filteredConvs = this.statsService.getFilteredConvs(filterTxt);
-          if (filterTxt != this._prevFilterTxt ||
-              (!this.numberOfItemsToDisplay && this.hasMoreConversations)) {
-            this.resetItemsToDisplay();
-            this._prevFilterTxt = filterTxt;
-          }
-          let filteredConvs = this.filteredConvs;
-          let i;
-          for (i = 0; i < this.numberOfItemsToDisplay && this.hasMoreConversations; ++i) {
-            if (i == this.listItems.length)
-              this.pushListItem();
-            this.listItems[i].build(this.getNextConv());
-          }
-          // Remove excess items.
-          while (this.listItems.length > i)
-            this.popListItem();
-        ]]>
-        </body>
-      </method>
-
-      <method name="resetItemsToDisplay">
-        <body>
-        <![CDATA[
-          let listbox = this.listbox;
-          // We need to have a list item so that we can use its height to compute
-          // the number of items to display. If we don't have one, we add it,
-          // but only if it will be used (i.e. this.hasMoreConversations is true).
-          if (this.hasMoreConversations) {
-            if (!listbox.firstChild)
-              this.pushListItem();
-            // Add enough items to fill the visible area, plus kNumItemsIncrement.
-            this.numberOfItemsToDisplay =
-              (listbox.clientHeight / listbox.firstChild.clientHeight) + this.kNumItemsIncrement;
-          }
-          else
-            this.numberOfItemsToDisplay = 0;
-          listbox.scrollToIndex(0);
-          listbox.clearSelection();
-          // Ensure the first item will be selected if the user presses
-          // down (for example) from the filterbox.
-          listbox.selectedIndex = -1;
-        ]]>
-        </body>
-      </method>
-
-      <method name="pushListItem">
-        <body>
-        <![CDATA[
-          // We use richlistitem as the nodeName so that CSS rules from richlistbox.css
-          // get applied. We use the className to apply the -moz-binding.
-          let elt = document.createElementNS(
-            "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-            "richlistitem");
-          elt.className = "newtab-item";
-          this.listbox.appendChild(elt);
-          this.listItems.push(elt);
-          return elt;
-        ]]>
-        </body>
-      </method>
-
-      <method name="popListItem">
-        <body>
-        <![CDATA[
-          this.listbox.lastChild.remove();
-          this.listItems.pop();
-        ]]>
-        </body>
-      </method>
-
-      <method name="startConversation">
-        <parameter name="aNewtabItem"/>
-        <body>
-        <![CDATA[
-          let conv = aNewtabItem.target.createConversation();
-          if (conv)
-            Conversations.focusConversation(conv);
-          // Ensure we don't focus the previous tab after removing ours.
-          this.previousTab = null;
-        ]]>
-        </body>
-      </method>
-
-      <!-- nsIObserver implementation -->
-      <method name="observe">
-        <parameter name="aSubject"/>
-        <parameter name="aTopic"/>
-        <parameter name="aData"/>
-        <body>
-        <![CDATA[
-          if (aTopic == "stats-service-log-sweeping") {
-            let nb = document.getAnonymousElementByAttribute(this, "anonid",
-                                                             "newtab-notifications");
-            let notification = nb.getNotificationWithValue("log-sweeping");
-            if (aData == "ongoing" && !notification) {
-              let notificationText =
-                Services.strings.createBundle("chrome://instantbird/locale/newtab.properties")
-                        .GetStringFromName("newtab.logSweepingInProgress");
-              nb.appendNotification(notificationText, "log-sweeping", "",
-                                    nb.PRIORITY_WARNING_MEDIUM, []);
-              return;
-            }
-            else if (aData == "done" && notification)
-              nb.removeNotification(notification);
-          }
-          this._forceRefresh = true;
-          this.refresh();
-        ]]>
-        </body>
-      </method>
-    </implementation>
-
-    <handlers>
-      <handler event="keydown">
-      <![CDATA[
-        if (event.keyCode == event.DOM_VK_RETURN) {
-          if (!this.listbox.firstChild)
-            return;
-          let item = this.listbox.selectedItem || this.listbox.firstChild;
-          this.startConversation(item);
-          window.getTabBrowser().removeTab(this.tab);
-          return;
-        }
-
-        // Don't handle the tab key.
-        if (event.keyCode == event.DOM_VK_TAB)
-          return;
-
-        if (event.keyCode == event.DOM_VK_ESCAPE && !this.filterbox.value) {
-          window.getTabBrowser().removeTab(this.tab);
-          return;
-        }
-
-        // If the key is a modifier, don't do anything.
-        if (event.altKey || event.metaKey || event.shiftKey || event.ctrlKey)
-          return;
-
-        const navKeyCodes = [KeyEvent.DOM_VK_PAGE_UP, KeyEvent.DOM_VK_PAGE_DOWN,
-                             KeyEvent.DOM_VK_HOME, KeyEvent.DOM_VK_END,
-                             KeyEvent.DOM_VK_UP, KeyEvent.DOM_VK_DOWN];
-
-        // If it's not a navigation key, make sure filterbox has focus and return.
-        if (navKeyCodes.indexOf(event.keyCode) == -1) {
-          this.filterbox.focus();
-          return;
-        }
-        // If the key was Home or End and the filterbox wasn't empty, simply
-        // return so that filterbox can handle it if it had focus.
-        if ((event.keyCode == KeyEvent.DOM_VK_HOME || event.keyCode == KeyEvent.DOM_VK_END) &&
-            this.filterbox.value)
-          return;
-
-        let listbox = this.listbox;
-        // The selectedIndex is -1 after a new filter. In this case, pressing the
-        // (page) down key from the filterbox should select the first item in the list.
-         if (listbox.selectedIndex < 0 && listbox.firstChild) {
-           if (event.keyCode != KeyEvent.DOM_VK_DOWN &&
-               event.keyCode != KeyEvent.DOM_VK_PAGE_DOWN)
-             return;
-           listbox.focus();
-           listbox.selectItem(listbox.firstChild);
-           listbox.ensureIndexIsVisible(0);
-           event.preventDefault();
-           event.stopPropagation();
-         }
-        // If the first item was selected, the (page) up key should focus the filterbox.
-        else if (listbox.selectedIndex == 0 &&
-                 (event.keyCode == KeyEvent.DOM_VK_UP ||
-                  event.keyCode == KeyEvent.DOM_VK_PAGE_UP)) {
-          listbox.clearSelection();
-          listbox.ensureIndexIsVisible(0);
-          this.filterbox.focus();
-          event.preventDefault();
-          event.stopPropagation();
-        }
-        // Otherwise, give listbox focus so that it can process the navigation key.
-        else
-          listbox.focus();
-      ]]>
-      </handler>
-    </handlers>
-  </binding>
-
-  <binding id="newtab-item"
-    extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content>
-      <xul:hbox class="newtabContent" flex="1" xbl:inherits="status">
-        <xul:stack class="buddyStatusIconStack" mousethrough="always">
-          <!-- The box around the buddy icon is a workaround for bug 955673. -->
-          <xul:box class="buddyIconHolder">
-            <xul:image anonid="buddyIcon" class="buddyIcon" xbl:inherits="src=buddyIcon,chat"/>
-          </xul:box>
-          <xul:image anonid="statusIcon" class="statusTypeIcon" xbl:inherits="status,chat"/>
-        </xul:stack>
-        <xul:vbox flex="1">
-          <xul:spacer flex="1"/>
-          <xul:hbox>
-            <xul:label class="displayName" flex="1" crop="end" xbl:inherits="value=displayName"/>
-            <xul:hbox flex="10000">
-              <xul:spacer flex="10000"/>
-              <xul:image class="infoIcon" xbl:inherits="source,selected"/>
-              <xul:label class="infoText" flex="1" crop="end" xbl:inherits="value=infoText"/>
-            </xul:hbox>
-          </xul:hbox>
-          <xul:spacer flex="1"/>
-          <xul:hbox class="statusAndProtoIconBox">
-            <xul:label class="statusText" flex="1" crop="end" xbl:inherits="value=statusText"/>
-            <xul:image class="protoIcon" xbl:inherits="src=protoIcon"/>
-          </xul:hbox>
-        </xul:vbox>
-      </xul:hbox>
-    </content>
-
-    <implementation>
-      <field name="target">null</field>
-
-      <!-- Textual representation of list items for accessibility tools -->
-      <property name="label" readonly="true">
-        <getter>
-        <![CDATA[
-          let description = this.target.displayName;
-          let statusText = this.getAttribute("statusText");
-          if(this.target.isChat)
-            description += " (" + this.target.infoText + "): " + statusText;
-          else
-            description += " (" + statusText + "): " + this.target.infoText;
-          return description;
-        ]]>
-        </getter>
-      </property>
-
-      <method name="build">
-        <parameter name="aTarget"/>
-        <body>
-        <![CDATA[
-          this.target = aTarget;
-          this.setAttribute("displayName", aTarget.displayName);
-          let source = aTarget.source;
-          this.setAttribute("source", source);
-          // Could be an existing conversation or a contact.
-          if (source != "chat") {
-            if (!("Status" in window))
-              ChromeUtils.import("resource:///modules/imStatusUtils.jsm");
-            this.setAttribute("status", Status.toAttribute(aTarget.statusType));
-          }
-          else
-            this.removeAttribute("status");
-          // Could be a new chat or an existing chat conversation.
-          if (aTarget.isChat)
-            this.setAttribute("chat", true);
-          else
-            this.removeAttribute("chat");
-          let status;
-          if (aTarget.isChat)
-            status = aTarget.statusText;
-          else {
-            status = Status.toLabel(aTarget.statusType);
-            let statusText = aTarget.statusText;
-            if (statusText)
-              status += " - " + statusText;
-          }
-          this.setAttribute("statusText", status);
-          this.setAttribute("infoText", aTarget.infoText);
-          this.setAttribute("protoIcon", aTarget.account.protocol.iconBaseURI + "icon.png");
-          this.setAttribute("buddyIcon", aTarget.buddyIconFilename);
-        ]]>
-        </body>
-      </method>
-    </implementation>
-
-    <handlers>
-      <handler event="click">
-      <![CDATA[
-        if (document.activeElement.localName != "richlistbox") {
-          // If the newtab had focus before the click, the focus would now be
-          // on the richlistbox. If the window wasn't focused before, this
-          // click should just focus it rather than starting a conversation.
-          return;
-        }
-        if (event.button == 2) // Don't handle right clicks.
-          return;
-        let newtab = document.getBindingParent(this);
-        newtab.startConversation(this);
-        let tabbrowser = window.getTabBrowser();
-        if (event.button != 1 && !event.controlKey && !event.metaKey)
-          tabbrowser.removeTab(newtab.tab);
-        else {
-          tabbrowser.selectPanel(newtab);
-          newtab.listbox.selectedIndex = -1;
-          newtab.filterbox.focus();
-        }
-      ]]>
-      </handler>
-
-      <handler event="mousemove">
-      <![CDATA[
-        document.getBindingParent(this).listbox.selectItem(this);
-      ]]>
-      </handler>
-    </handlers>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/nsContextMenu.js
+++ /dev/null
@@ -1,529 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource:///modules/ibTagMenu.jsm");
-
-var gContextMenu = null;
-
-function nsContextMenu(aXulMenu, aBrowser) {
-  this.target            = null;
-  this.browser           = null;
-  this.conv              = null;
-  this.menu              = null;
-  this.tagMenu           = null;
-  this.onLink            = false;
-  this.onMailtoLink      = false;
-  this.onSaveableLink    = false;
-  this.link              = false;
-  this.linkURL           = "";
-  this.linkURI           = null;
-  this.linkProtocol      = null;
-  this.onNick            = false;
-  this.nick              = "";
-  this.isNickOpenConv    = false;
-  this.isNickShowLogs    = false;
-  this.isNickAddContact  = false;
-  this.isTextSelected    = false;
-  this.isContentSelected = false;
-  this.shouldDisplay     = true;
-
-  try {
-    this.ellipsis =
-      Services.prefs.getComplexValue("intl.ellipsis",
-                                     Ci.nsIPrefLocalizedString).data;
-  } catch (e) {
-    this.ellipsis = "\u2026";
-  }
-
-  // Initialize new menu.
-  this.initMenu(aXulMenu, aBrowser);
-}
-
-// Prototype for nsContextMenu "class."
-nsContextMenu.prototype = {
-  cleanup: function() {
-    let elt = document.getElementById("context-sep-selectall").nextSibling;
-    // remove the action menuitems added last time we opened the popup
-    while (elt && elt.localName != "menuseparator") {
-      let tmp = elt.nextSibling;
-      elt.remove();
-      elt = tmp;
-    }
-  },
-
-  // Initialize context menu.
-  initMenu: function CM_initMenu(aPopup, aBrowser) {
-    this.menu = aPopup;
-    this.browser = aBrowser;
-    this.conv = this.browser._conv;
-
-    // Get contextual info.
-    let node = document.popupNode;
-    if (node.localName == "listbox") {
-      // Clicked the participant list, but not a listitem.
-      this.shouldDisplay = false;
-      return;
-    }
-    this.setTarget(node);
-
-    let isParticipantList = node.localName == "listitem";
-    let nickActions = this.getNickActions(isParticipantList);
-    this.onNick = nickActions.some(action => action.visible);
-    if (isParticipantList && !this.onNick) {
-      // If we're in the participant list, there will be no other entries.
-      this.shouldDisplay = false;
-      return;
-    }
-
-    let actions = [];
-    while (node) {
-      if (node._originalMsg) {
-        let msg = node._originalMsg;
-        actions = msg.getActions();
-        break;
-      }
-      node = node.parentNode;
-    }
-
-    this.isTextSelected = this.isTextSelection();
-    this.isContentSelected = this.isContentSelection();
-
-    // Initialize (disable/remove) menu items.
-    // Open/Save/Send link depends on whether we're in a link.
-    let shouldShow = this.onSaveableLink;
-    this.showItem("context-openlink", shouldShow);
-    this.showItem("context-sep-open", shouldShow);
-    this.showItem("context-savelink", shouldShow);
-
-    this.showItem("context-searchselect", this.isTextSelected);
-    this.showItem("context-searchselect-with", this.isTextSelected);
-
-    // Copy depends on whether there is selected text.
-    // Enabling this context menu item is now done through the global
-    // command updating system
-    goUpdateGlobalEditMenuItems();
-
-    this.showItem("context-copy", this.isContentSelected);
-    this.showItem("context-selectall", (!this.onNick && !this.onLink) ||
-                                       this.isContentSelected);
-    this.showItem("context-sep-selectall", actions.length);
-    this.showItem("context-sep-messageactions", this.isTextSelected);
-
-    // Copy email link depends on whether we're on an email link.
-    this.showItem("context-copyemail", this.onMailtoLink);
-
-    // Copy link location depends on whether we're on a non-mailto link.
-    this.showItem("context-copylink", this.onLink && !this.onMailtoLink);
-    this.showItem("context-sep-copylink", this.onLink && this.isContentSelected);
-
-    // Display nick menu items.
-    let isNonNickItems = this.isContentSelected || this.isTextSelected ||
-                         this.onLink || actions.length;
-    this.showItem("context-sep-nick", this.onNick && isNonNickItems);
-    for (let action of nickActions)
-      this.showItem(action.id, action.visible);
-
-    if (this.onNick) {
-      let elt = document.getElementById("context-nick-showlogs");
-      // Start disabled, then enable if we have logs.
-      elt.setAttribute("disabled", true);
-      this.getLogsForNick(this.nick).then(aLogs => {
-        if (aLogs && aLogs.hasMoreElements())
-          elt.removeAttribute("disabled");
-      });
-    }
-
-    // Display action menu items.
-    let before = document.getElementById("context-sep-messageactions");
-    for (let action of actions) {
-      let menuitem = document.createElement("menuitem");
-      menuitem.setAttribute("label", action.label);
-      menuitem.setAttribute("oncommand", "this.action.run();");
-      menuitem.action = action;
-      before.parentNode.insertBefore(menuitem, before);
-    }
-  },
-
-  getLogsForNick: function(aNick) {
-    let account = this.conv.account;
-    // We need the normalizedName of private conversations opened
-    // with a chatBuddy.
-    let normalizedName =
-      account.normalize(this.conv.target.getNormalizedChatBuddyName(aNick));
-    return Services.logs.getLogsForAccountAndName(account,
-                                                  normalizedName, true);
-  },
-  getNickActions: function(aIsParticipantList) {
-    let bundle = document.getElementById("bundle_instantbird");
-    let nick = this.nick;
-    let actions = [];
-    let addAction = function(aId, aVisible) {
-      let domId = "context-nick-" + aId.toLowerCase();
-      let stringId = "contextmenu.nick" + aId;
-      if (!aIsParticipantList)
-        stringId += ".withNick";
-      document.getElementById(domId).label =
-        bundle.getFormattedString(stringId, [nick]);
-      actions.push({id: domId, visible: aVisible});
-    };
-
-    // Special-case twitter. XXX Drop this when twitter DMs work.
-    let isTwitter = this.conv.account.protocol.id == "prpl-twitter";
-
-    addAction("OpenConv", this.onNick && !isTwitter);
-    addAction("ShowLogs", this.onNick);
-
-    let isAddContact = this.onNick && !isTwitter;
-    if (isAddContact) {
-      let account = this.conv.account;
-      isAddContact = false;
-      // We don't want to support adding chatBuddies as contacts if we are not
-      // sure the normalizedChatBuddyName is enough information to add a contact.
-      // This is a problem e.g. for XMPP MUCs. We require at least that the
-      // normalizedChatBuddyName of the nick is normalized like a normalizedName
-      // for contacts.
-      let normalizedNick = this.conv.target.getNormalizedChatBuddyName(nick);
-      if (normalizedNick == account.normalize(normalizedNick) &&
-          !Services.contacts.getAccountBuddyByNameAndAccount(normalizedNick, account))
-        isAddContact = true;
-    }
-    addAction("AddContact", isAddContact);
-    if (isAddContact) {
-      this.tagMenu = new TagMenu(this, window, "context-nick-addcontact",
-                                 this.nickAddContact, this.nickAddContact);
-    }
-
-    return actions;
-  },
-  nickOpenConv: function() {
-    let name = this.conv.target.getNormalizedChatBuddyName(this.nick);
-    let newConv = this.conv.account.createConversation(name);
-    Conversations.focusConversation(newConv);
-  },
-  nickAddContact: function(aTag) {
-    return this.conv.account.addBuddy(aTag, this.nick);
-  },
-  nickShowLogs: function() {
-    let nick = this.nick;
-    this.getLogsForNick(nick).then(aLogs => {
-      if (!aLogs || !aLogs.hasMoreElements())
-        return;
-      window.openDialog("chrome://instantbird/content/viewlog.xul",
-                        "Logs", "chrome,resizable", {logs: aLogs}, nick);
-    });
-  },
-
-  // Set various context menu attributes based on the state of the world.
-  setTarget: function(aNode) {
-    // Remember the node that was clicked.
-    this.target = aNode;
-
-    // Check if we are in the participant list.
-    if (this.target.localName == "listitem") {
-      this.onNick = true;
-      this.nick = this.target.label;
-      return;
-    }
-
-    // First, do checks for nodes that never have children.
-    // Second, bubble out, looking for items of interest that can have childen.
-    // Always pick the innermost link, background image, etc.
-    const XMLNS = "http://www.w3.org/XML/1998/namespace";
-    var elem = this.target;
-    while (elem) {
-      if (elem.nodeType == Node.ELEMENT_NODE) {
-        // Link?
-        if (!this.onLink &&
-             ((elem instanceof HTMLAnchorElement && elem.href) ||
-              (elem instanceof HTMLAreaElement && elem.href) ||
-              elem instanceof HTMLLinkElement ||
-              elem.getAttributeNS("http://www.w3.org/1999/xlink", "type") == "simple")) {
-
-          // Target is a link or a descendant of a link.
-          this.onLink = true;
-
-          // xxxmpc: this is kind of a hack to work around a Gecko bug (see bug 266932)
-          // we're going to walk up the DOM looking for a parent link node,
-          // this shouldn't be necessary, but we're matching the existing behaviour for left click
-          var realLink = elem;
-          var parent = elem;
-          while ((parent = parent.parentNode) &&
-                 (parent.nodeType == Node.ELEMENT_NODE)) {
-            try {
-              if ((parent instanceof HTMLAnchorElement && parent.href) ||
-                  (parent instanceof HTMLAreaElement && parent.href) ||
-                  parent instanceof HTMLLinkElement ||
-                  parent.getAttributeNS("http://www.w3.org/1999/xlink", "type") == "simple")
-                realLink = parent;
-            } catch (e) { }
-          }
-
-          // Remember corresponding element.
-          this.link = realLink;
-          this.linkURL = this.getLinkURL();
-          this.linkURI = this.getLinkURI();
-          this.linkProtocol = this.getLinkProtocol();
-          this.onMailtoLink = (this.linkProtocol == "mailto");
-          this.onSaveableLink = this.isLinkSaveable(this.link);
-        }
-
-        // Nick?
-        if (!this.onNick && this.conv.isChat &&
-            (elem.classList.contains("ib-nick") || elem.classList.contains("ib-sender"))) {
-          this.nick = elem.textContent;
-          this.onNick = true;
-        }
-      }
-
-      elem = elem.parentNode;
-    }
-  },
-
-  // Returns true if clicked-on link targets a resource that can be saved.
-  isLinkSaveable: function(aLink) {
-    return this.linkProtocol && !(
-             this.linkProtocol == "mailto"     ||
-             this.linkProtocol == "javascript" ||
-             this.linkProtocol == "news"       ||
-             this.linkProtocol == "snews"      );
-  },
-
-  openEngineManager: function() {
-    var window = Services.wm.getMostRecentWindow("Browser:SearchManager");
-    if (window)
-      window.focus();
-    else {
-      openDialog("chrome://instantbird/content/engineManager.xul",
-                 "_blank", "chrome,dialog,modal,centerscreen");
-    }
-  },
-
-  buildSearchEngineList: function() {
-    let popup = document.getElementById("context-popup-searchselect-with");
-    // remove the menuitems added last time we opened the popup
-    while (popup.firstChild && popup.firstChild.localName != "menuseparator")
-      popup.firstChild.remove();
-
-    let engines = Services.search.getVisibleEngines({});
-
-    for (let i = engines.length - 1; i >= 0; --i) {
-      let menuitem = document.createElement("menuitem");
-      let name = engines[i].name;
-      menuitem.setAttribute("label", name);
-      menuitem.setAttribute("class", "menuitem-iconic");
-      if (engines[i].iconURI)
-        menuitem.setAttribute("src", engines[i].iconURI.spec);
-      popup.insertBefore(menuitem, popup.firstChild);
-      menuitem.engine = engines[i];
-    }
-  },
-
-  searchSelectionWith: function(aEvent) {
-    var engine = aEvent.originalTarget.engine;
-    if (engine)
-      this.searchSelection(engine);
-  },
-
-  searchSelection: function(aEngine) {
-    if (!aEngine) {
-      aEngine = Services.search.defaultEngine;
-    }
-
-    var submission = aEngine.getSubmission(getBrowserSelection(), null);
-    // getSubmission can return null if the engine doesn't have a URL
-    // with a text/html response type.  This is unlikely (since
-    // SearchService._addEngineToStore() should fail for such an engine),
-    // but let's be on the safe side.
-    if (!submission)
-      return;
-
-    this.openLink(submission.uri);
-  },
-
-  // Open linked-to URL in a new window.
-  openLink: function(aURI) {
-    Cc["@mozilla.org/uriloader/external-protocol-service;1"].
-    getService(Ci.nsIExternalProtocolService).
-    loadURI(aURI || this.linkURI, window);
-  },
-
-  // Generate email address and put it on clipboard.
-  copyEmail: function() {
-    // Copy the comma-separated list of email addresses only.
-    // There are other ways of embedding email addresses in a mailto:
-    // link, but such complex parsing is beyond us.
-    var url = this.linkURL;
-    var qmark = url.indexOf("?");
-    var addresses;
-
-    // 7 == length of "mailto:"
-    addresses = qmark > 7 ? url.substring(7, qmark) : url.substr(7);
-
-    // Let's try to unescape it using a character set
-    // in case the address is not ASCII.
-    try {
-      var characterSet = this.target.ownerDocument.characterSet;
-      const textToSubURI = Cc["@mozilla.org/intl/texttosuburi;1"].
-                           getService(Ci.nsITextToSubURI);
-      addresses = textToSubURI.unEscapeURIForUI(characterSet, addresses);
-    }
-    catch(ex) {
-      // Do nothing.
-    }
-
-    var clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].
-                    getService(Ci.nsIClipboardHelper);
-    clipboard.copyString(addresses);
-  },
-
-  ///////////////
-  // Utilities //
-  ///////////////
-
-  // Show/hide one item (specified via name or the item element itself).
-  showItem: function(aItemOrId, aShow) {
-    var item = aItemOrId.constructor == String ?
-      document.getElementById(aItemOrId) : aItemOrId;
-    if (item)
-      item.hidden = !aShow;
-  },
-
-  // Temporary workaround for DOM api not yet implemented by XUL nodes.
-  cloneNode: function(aItem) {
-    // Create another element like the one we're cloning.
-    var node = document.createElement(aItem.tagName);
-
-    // Copy attributes from argument item to the new one.
-    var attrs = aItem.attributes;
-    for (var i = 0; i < attrs.length; i++) {
-      var attr = attrs.item(i);
-      node.setAttribute(attr.nodeName, attr.nodeValue);
-    }
-
-    // Voila!
-    return node;
-  },
-
-  // Generate fully qualified URL for clicked-on link.
-  getLinkURL: function() {
-    var href = this.link.href;
-    if (href)
-      return href;
-
-    href = this.link.getAttributeNS("http://www.w3.org/1999/xlink",
-                                    "href");
-
-    if (!href || !href.match(/\S/)) {
-      // Without this we try to save as the current doc,
-      // for example, HTML case also throws if empty
-      throw "Empty href";
-    }
-
-    return makeURLAbsolute(this.link.baseURI, href);
-  },
-
-  getLinkURI: function() {
-    try {
-      return Services.io.newURI(this.linkURL);
-    }
-    catch (ex) {
-     // e.g. empty URL string
-    }
-
-    return null;
-  },
-
-  getLinkProtocol: function() {
-    if (this.linkURI)
-      return this.linkURI.scheme; // can be |undefined|
-
-    return null;
-  },
-
-  // Get text of link.
-  linkText: function() {
-    var text = gatherTextUnder(this.link);
-    if (!text || !text.match(/\S/)) {
-      text = this.link.getAttribute("title");
-      if (!text || !text.match(/\S/)) {
-        text = this.link.getAttribute("alt");
-        if (!text || !text.match(/\S/))
-          text = this.linkURL;
-      }
-    }
-
-    return text;
-  },
-
-  // Get selected text. Only display the first 15 chars.
-  isTextSelection: function() {
-    // Get 16 characters, so that we can trim the selection if it's greater
-    // than 15 chars
-    var selectedText = getBrowserSelection(16);
-
-    if (!selectedText)
-      return false;
-
-    if (selectedText.length > 15)
-      selectedText = selectedText.substr(0,15) + this.ellipsis;
-
-    var engine = Services.search.defaultEngine;
-    if (!engine)
-      return false;
-
-    // format "Search <engine> for <selection>" string to show in menu
-    var bundle = document.getElementById("bundle_instantbird");
-    var menuLabel = bundle.getFormattedString("contextMenuSearchText",
-                                              [engine.name,
-                                               selectedText]);
-    document.getElementById("context-searchselect").label = menuLabel;
-    document.getElementById("context-searchselect").accessKey =
-      bundle.getString("contextMenuSearchText.accesskey");
-    menuLabel = bundle.getFormattedString("contextMenuSearchWith",
-                                          [selectedText]);
-    document.getElementById("context-searchselect-with").label = menuLabel;
-
-    return true;
-  },
-
-  // Returns true if anything is selected.
-  isContentSelection: function() {
-    return !document.commandDispatcher.focusedWindow.getSelection().isCollapsed;
-  }
-};
-
-/**
- * Gets the selected text in the active browser. Leading and trailing
- * whitespace is removed, and consecutive whitespace is replaced by a single
- * space. A maximum of 150 characters will be returned, regardless of the value
- * of aCharLen.
- *
- * @param aCharLen
- *        The maximum number of characters to return.
- */
-function getBrowserSelection(aCharLen) {
-  // selections of more than 150 characters aren't useful
-  const kMaxSelectionLen = 150;
-  const charLen = Math.min(aCharLen || kMaxSelectionLen, kMaxSelectionLen);
-
-  var focusedWindow = document.commandDispatcher.focusedWindow;
-  var selection = focusedWindow.getSelection().toString();
-
-  if (selection) {
-    if (selection.length > charLen) {
-      // only use the first charLen important chars. see bug 221361
-      var pattern = new RegExp("^(?:\\s*.){0," + charLen + "}");
-      pattern.test(selection);
-      selection = RegExp.lastMatch;
-    }
-
-    selection = selection.replace(/^\s+/, "")
-                         .replace(/\s+$/, "")
-                         .replace(/\s+/g, " ");
-
-    if (selection.length > charLen)
-      selection = selection.substr(0, charLen);
-  }
-  return selection;
-}
deleted file mode 100644
--- a/im/content/overrides/app-license.html
+++ /dev/null
@@ -1,4 +0,0 @@
-    <p>Official <b>binaries</b> of this product released by
-    the <a href="http://www.instantbird.com/">Instantbird</a> team
-    are made available under the GNU General Public License
-    (<a href="#gpl">GPL</a>) version 2.0 or later.
deleted file mode 100644
--- a/im/content/preferences/advanced.js
+++ /dev/null
@@ -1,461 +0,0 @@
-# -*- indent-tabs-mode: nil; js-indent-level: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// Load DownloadUtils module for convertByteUnits
-ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm");
-ChromeUtils.import("resource://gre/modules/ctypes.jsm");
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-ChromeUtils.import("resource://gre/modules/LoadContextInfo.jsm");
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-var gAdvancedPane = {
-  _inited: false,
-
-  /**
-   * Brings the appropriate tab to the front and initializes various bits of UI.
-   */
-  init: function ()
-  {
-    this._inited = true;
-    var advancedPrefs = document.getElementById("advancedPrefs");
-
-    var extraArgs = ("arguments" in window) && window.arguments[1];
-    if (extraArgs && extraArgs["advancedTab"]){
-      advancedPrefs.selectedTab = document.getElementById(extraArgs["advancedTab"]);
-    } else {
-      var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex");
-      if (preference.value !== null)
-        advancedPrefs.selectedIndex = preference.value;
-    }
-
-    this.updateConnectionGroupbox();
-#ifdef MOZ_UPDATER
-    let onUnload = function () {
-      window.removeEventListener("unload", onUnload);
-      Services.prefs.removeObserver("app.update.", this);
-    }.bind(this);
-    window.addEventListener("unload", onUnload);
-    Services.prefs.addObserver("app.update.", this);
-    this.updateReadPrefs();
-#endif
-
-    let bundlePrefs = document.getElementById("bundlePreferences");
-
-    // Notify observers that the UI is now ready
-    Services.obs.notifyObservers(window, "advanced-pane-loaded");
-  },
-
-  /**
-   * Stores the identity of the current tab in preferences so that the selected
-   * tab can be persisted between openings of the preferences window.
-   */
-  tabSelectionChanged: function ()
-  {
-    if (!this._inited)
-      return;
-    var advancedPrefs = document.getElementById("advancedPrefs");
-    var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex");
-    preference.valueFromPreferences = advancedPrefs.selectedIndex;
-  },
-
-  // GENERAL TAB
-
-  /*
-   * Preferences:
-   *
-   * accessibility.browsewithcaret
-   * - true enables keyboard navigation and selection within web pages using a
-   *   visible caret, false uses normal keyboard navigation with no caret
-   * accessibility.typeaheadfind
-   * - when set to true, typing outside text areas and input boxes will
-   *   automatically start searching for what's typed within the current
-   *   document; when set to false, no search action happens
-   * general.autoScroll
-   * - when set to true, clicking the scroll wheel on the mouse activates a
-   *   mouse mode where moving the mouse down scrolls the document downward with
-   *   speed correlated with the distance of the cursor from the original
-   *   position at which the click occurred (and likewise with movement upward);
-   *   if false, this behavior is disabled
-   * general.smoothScroll
-   * - set to true to enable finer page scrolling than line-by-line on page-up,
-   *   page-down, and other such page movements
-   * layout.spellcheckDefault
-   * - an integer:
-   *     0  disables spellchecking
-   *     1  enables spellchecking, but only for multiline text fields
-   *     2  enables spellchecking for all text fields
-   */
-
-  /**
-   * Stores the original value of the spellchecking preference to enable proper
-   * restoration if unchanged (since we're mapping a tristate onto a checkbox).
-   */
-  _storedSpellCheck: 0,
-
-  /**
-   * Returns true if any spellchecking is enabled and false otherwise, caching
-   * the current value to enable proper pref restoration if the checkbox is
-   * never changed.
-   */
-  readCheckSpelling: function ()
-  {
-    var pref = document.getElementById("layout.spellcheckDefault");
-    this._storedSpellCheck = pref.value;
-
-    return (pref.value != 0);
-  },
-
-  /**
-   * Returns the value of the spellchecking preference represented by UI,
-   * preserving the preference's "hidden" value if the preference is
-   * unchanged and represents a value not strictly allowed in UI.
-   */
-  writeCheckSpelling: function ()
-  {
-    var checkbox = document.getElementById("checkSpelling");
-    return checkbox.checked ? (this._storedSpellCheck == 2 ? 2 : 1) : 0;
-  },
-
-  showSearchEngineManager: function()
-  {
-    var window = Services.wm.getMostRecentWindow("Browser:SearchManager");
-    if (window)
-      window.focus();
-    else {
-      openDialog("chrome://instantbird/content/engineManager.xul",
-                 "_blank", "chrome,dialog,modal,centerscreen");
-    }
-  },
-
-  showConfigEdit: function()
-  {
-    document.documentElement.openWindow("Preferences:ConfigManager",
-                                        "chrome://global/content/config.xul",
-                                        "", null);
-  },
-
-  /**
-   * security.OCSP.enabled is an integer value for legacy reasons.
-   * A value of 1 means OCSP is enabled. Any other value means it is disabled.
-   */
-  readEnableOCSP: function ()
-  {
-    var preference = document.getElementById("security.OCSP.enabled");
-    // This is the case if the preference is the default value.
-    if (preference.value === undefined) {
-      return true;
-    }
-    return preference.value == 1;
-  },
-
-  /**
-   * See documentation for readEnableOCSP.
-   */
-  writeEnableOCSP: function ()
-  {
-    var checkbox = document.getElementById("enableOCSP");
-    return checkbox.checked ? 1 : 0;
-  },
-
-  /**
-   * When the user toggles the layers.acceleration.disabled pref,
-   * sync its new value to the gfx.direct2d.disabled pref too.
-   */
-  updateHardwareAcceleration: function()
-  {
-#ifdef XP_WIN
-    var fromPref = document.getElementById("layers.acceleration.disabled");
-    var toPref = document.getElementById("gfx.direct2d.disabled");
-    toPref.value = fromPref.value;
-#endif
-  },
-
-  // NETWORK TAB
-
-  /*
-   * Preferences:
-   *
-   * browser.cache.disk.capacity
-   * - the size of the browser cache in KB
-   * - Only used if browser.cache.disk.smart_size.enabled is disabled
-   */
-
-  /**
-   * Displays a dialog in which proxy settings may be changed.
-   */
-  showConnections: function ()
-  {
-    document.documentElement.openSubDialog("chrome://instantbird/content/preferences/connection.xul",
-                                           "", null);
-  },
-
-  /**
-   * Displays a dialog in which purple proxy settings may be changed.
-   */
-  showProxies: function ()
-  {
-    document.documentElement.openSubDialog("chrome://instantbird/content/proxies.xul",
-                                           "", null);
-  },
-
-  /**
-   * Adapt the content of the connection groupbox depending on libpurple being
-   * there or not.
-   */
-  updateConnectionGroupbox: function ()
-  {
-    let hasLibpurple = "@instantbird.org/libpurple/core;1" in Cc;
-    // Hide explanatory header and libpurple section.
-    document.getElementById("connectionGroupHeader").hidden = !hasLibpurple;
-    document.getElementById("connectionGroupSeparator").hidden = !hasLibpurple;
-    document.getElementById("purpleConnectionBox").hidden = !hasLibpurple;
-    // Choose appropriate label for the Mozilla proxy options.
-    document.getElementById("mozConnLabelWithoutLibpurple").hidden = hasLibpurple;
-    document.getElementById("mozConnLabelWithLibpurple").hidden = !hasLibpurple;
-  },
-
-  // UPDATE TAB
-
-  /*
-   * Preferences:
-   *
-   * app.update.enabled
-   * - true if updates to the application are enabled, false otherwise
-   * extensions.update.enabled
-   * - true if updates to extensions and themes are enabled, false otherwise
-   * browser.search.update
-   * - true if updates to search engines are enabled, false otherwise
-   * app.update.auto
-   * - true if updates should be automatically downloaded and installed,
-   *   possibly with a warning if incompatible extensions are installed (see
-   *   app.update.mode); false if the user should be asked what he wants to do
-   *   when an update is available
-   * app.update.mode
-   * - an integer:
-   *     0    do not warn if an update will disable extensions or themes
-   *     1    warn if an update will disable extensions or themes
-   *     2    warn if an update will disable extensions or themes *or* if the
-   *          update is a major update
-   */
-
-#ifdef MOZ_UPDATER
-  /**
-   * Selects the item of the radiogroup, and sets the warnIncompatible checkbox
-   * based on the pref values and locked states.
-   *
-   * UI state matrix for update preference conditions
-   *
-   * UI Components:                              Preferences
-   * Radiogroup                                  i   = app.update.enabled
-   * Warn before disabling extensions checkbox   ii  = app.update.auto
-   *                                             iii = app.update.mode
-   *
-   * Disabled states:
-   * Element           pref  value  locked  disabled
-   * radiogroup        i     t/f    f       false
-   *                   i     t/f    *t*     *true*
-   *                   ii    t/f    f       false
-   *                   ii    t/f    *t*     *true*
-   *                   iii   0/1/2  t/f     false
-   * warnIncompatible  i     t      f       false
-   *                   i     t      *t*     *true*
-   *                   i     *f*    t/f     *true*
-   *                   ii    t      f       false
-   *                   ii    t      *t*     *true*
-   *                   ii    *f*    t/f     *true*
-   *                   iii   0/1/2  f       false
-   *                   iii   0/1/2  *t*     *true*
-   */
-  updateReadPrefs: function ()
-  {
-    var enabledPref = document.getElementById("app.update.enabled");
-    var autoPref = document.getElementById("app.update.auto");
-    var radiogroup = document.getElementById("updateRadioGroup");
-
-    if (!enabledPref.value)   // Don't care for autoPref.value in this case.
-      radiogroup.value="manual";    // 3. Never check for updates.
-    else if (autoPref.value)  // enabledPref.value && autoPref.value
-      radiogroup.value="auto";      // 1. Automatically install updates for Desktop only
-    else                      // enabledPref.value && !autoPref.value
-      radiogroup.value="checkOnly"; // 2. Check, but let me choose
-
-    var canCheck = Cc["@mozilla.org/updates/update-service;1"].
-                     getService(Ci.nsIApplicationUpdateService).
-                     canCheckForUpdates;
-    // canCheck is false if the enabledPref is false and locked,
-    // or the binary platform or OS version is not known.
-    // A locked pref is sufficient to disable the radiogroup.
-    radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
-
-    var modePref = document.getElementById("app.update.mode");
-    var warnIncompatible = document.getElementById("warnIncompatible");
-    // the warnIncompatible checkbox value is set by readAddonWarn
-    warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
-                                !enabledPref.value || !autoPref.value;
-
-#ifdef MOZ_MAINTENANCE_SERVICE
-    // Check to see if the maintenance service is installed.
-    // If it is don't show the preference at all.
-    var installed;
-    try {
-      var wrk = Cc["@mozilla.org/windows-registry-key;1"]
-                .createInstance(Ci.nsIWindowsRegKey);
-      wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE,
-               "SOFTWARE\\Mozilla\\MaintenanceService",
-               wrk.ACCESS_READ | wrk.WOW64_64);
-      installed = wrk.readIntValue("Installed");
-      wrk.close();
-    } catch(e) {
-    }
-    if (installed != 1) {
-      document.getElementById("useService").hidden = true;
-    }
-    try {
-      const DRIVE_FIXED = 3;
-      const LPCWSTR = ctypes.char16_t.ptr;
-      const UINT = ctypes.uint32_t;
-      let kernel32 = ctypes.open("kernel32");
-      let GetDriveType = kernel32.declare("GetDriveTypeW", ctypes.default_abi, UINT, LPCWSTR);
-      var UpdatesDir = Cc["@mozilla.org/updates/update-service;1"].
-                       getService(Ci.nsIApplicationUpdateService);
-      let rootPath = UpdatesDir.getUpdatesDirectory();
-      while (rootPath.parent != null) {
-        rootPath = rootPath.parent;
-      }
-      if (GetDriveType(rootPath.path) != DRIVE_FIXED) {
-        document.getElementById("useService").hidden = true;
-      }
-      kernel32.close();
-    } catch(e) {
-    }
-#endif
-  },
-
-  /**
-   * Sets the pref values based on the selected item of the radiogroup,
-   * and sets the disabled state of the warnIncompatible checkbox accordingly.
-   */
-  updateWritePrefs: function ()
-  {
-    var enabledPref = document.getElementById("app.update.enabled");
-    var autoPref = document.getElementById("app.update.auto");
-    var modePref = document.getElementById("app.update.mode");
-    var radiogroup = document.getElementById("updateRadioGroup");
-    switch (radiogroup.value) {
-      case "auto":      // 1. Automatically install updates for Desktop only
-        enabledPref.value = true;
-        autoPref.value = true;
-        break;
-      case "checkOnly": // 2. Check, but let me choose
-        enabledPref.value = true;
-        autoPref.value = false;
-        break;
-      case "manual":    // 3. Never check for updates.
-        enabledPref.value = false;
-        autoPref.value = false;
-    }
-
-    var warnIncompatible = document.getElementById("warnIncompatible");
-    warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
-                                autoPref.locked || !autoPref.value ||
-                                modePref.locked;
-  },
-
-  /**
-   * Stores the value of the app.update.mode preference, which is a tristate
-   * integer preference.  We store the value here so that we can properly
-   * restore the preference value if the UI reflecting the preference value
-   * is in a state which can represent either of two integer values (as
-   * opposed to only one possible value in the other UI state).
-   */
-  _modePreference: -1,
-
-  /**
-   * Reads the app.update.mode preference and converts its value into a
-   * true/false value for use in determining whether the "Warn me if this will
-   * disable extensions or themes" checkbox is checked.  We also save the value
-   * of the preference so that the preference value can be properly restored if
-   * the user's preferences cannot adequately be expressed by a single checkbox.
-   *
-   * app.update.mode          Checkbox State    Meaning
-   * 0                        Unchecked         Do not warn
-   * 1                        Checked           Warn if there are incompatibilities
-   * 2                        Checked           Warn if there are incompatibilities,
-   *                                            or the update is major.
-   */
-  readAddonWarn: function ()
-  {
-    var preference = document.getElementById("app.update.mode");
-    var warn = preference.value != 0;
-    gAdvancedPane._modePreference = warn ? preference.value : 1;
-    return warn;
-  },
-
-  /**
-   * Converts the state of the "Warn me if this will disable extensions or
-   * themes" checkbox into the integer preference which represents it,
-   * returning that value.
-   */
-  writeAddonWarn: function ()
-  {
-    var warnIncompatible = document.getElementById("warnIncompatible");
-    return !warnIncompatible.checked ? 0 : gAdvancedPane._modePreference;
-  },
-
-  /**
-   * Displays the history of installed updates.
-   */
-  showUpdates: function ()
-  {
-    var prompter = Cc["@mozilla.org/updates/update-prompt;1"]
-                     .createInstance(Ci.nsIUpdatePrompt);
-    prompter.showUpdateHistory(window);
-  },
-#endif
-
-  // ENCRYPTION TAB
-
-  /*
-   * Preferences:
-   *
-   * security.default_personal_cert
-   * - a string:
-   *     "Select Automatically"   select a certificate automatically when a site
-   *                              requests one
-   *     "Ask Every Time"         present a dialog to the user so he can select
-   *                              the certificate to use on a site which
-   *                              requests one
-   */
-
-  /**
-   * Displays the user's certificates and associated options.
-   */
-  showCertificates: function ()
-  {
-    document.documentElement.openWindow("mozilla:certmanager",
-                                        "chrome://pippki/content/certManager.xul",
-                                        "", null);
-  },
-
-  /**
-   * Displays a dialog from which the user can manage his security devices.
-   */
-  showSecurityDevices: function ()
-  {
-    document.documentElement.openWindow("mozilla:devicemanager",
-                                        "chrome://pippki/content/device_manager.xul",
-                                        "", null);
-  },
-
-#ifdef MOZ_UPDATER
-  observe: function (aSubject, aTopic, aData) {
-    switch(aTopic) {
-      case "nsPref:changed":
-        this.updateReadPrefs();
-        break;
-    }
-  },
-#endif
-};
deleted file mode 100644
--- a/im/content/preferences/advanced.xul
+++ /dev/null
@@ -1,304 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<!DOCTYPE overlay [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-%brandDTD;
-<!ENTITY % advancedDTD SYSTEM "chrome://instantbird/locale/preferences/advanced.dtd">
-%advancedDTD;
-<!ENTITY % privacyDTD SYSTEM "chrome://instantbird/locale/preferences/privacy.dtd">
-%privacyDTD;
-]>
-
-<overlay id="AdvancedPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneAdvanced" onpaneload="gAdvancedPane.init();">
-
-    <preferences id="advancedPreferences">
-      <preference id="browser.preferences.advanced.selectedTabIndex"
-                  name="browser.preferences.advanced.selectedTabIndex"
-                  type="int"/>
-
-      <!--XXX button prefs -->
-
-      <!-- General tab -->
-      <preference id="accessibility.browsewithcaret"   name="accessibility.browsewithcaret"   type="bool"/>
-      <preference id="accessibility.typeaheadfind"     name="accessibility.typeaheadfind"     type="bool"/>
-      <preference id="accessibility.blockautorefresh"  name="accessibility.blockautorefresh"  type="bool"/>
-
-      <preference id="general.autoScroll"              name="general.autoScroll"              type="bool"/>
-      <preference id="general.smoothScroll"            name="general.smoothScroll"            type="bool"/>
-      <preference id="layers.acceleration.disabled"    name="layers.acceleration.disabled"    type="bool"   inverted="true"
-                  onchange="gAdvancedPane.updateHardwareAcceleration()"/>
-#ifdef XP_WIN
-      <preference id="gfx.direct2d.disabled"           name="gfx.direct2d.disabled"           type="bool"   inverted="true"/>
-#endif
-      <preference id="layout.spellcheckDefault"        name="layout.spellcheckDefault"        type="int"/>
-
-      <!-- Network tab -->
-      <preference id="browser.cache.disk.capacity"     name="browser.cache.disk.capacity"     type="int"/>
-      <preference id="browser.offline-apps.notify"     name="browser.offline-apps.notify"     type="bool"/>
-
-      <preference id="browser.cache.disk.smart_size.enabled"
-                  name="browser.cache.disk.smart_size.enabled"
-                  inverted="true"
-                  type="bool"/>
-
-     <!-- Update tab -->
-#ifdef MOZ_UPDATER
-      <preference id="app.update.enabled"              name="app.update.enabled"              type="bool"/>
-      <preference id="app.update.auto"                 name="app.update.auto"                 type="bool"/>
-      <preference id="app.update.mode"                 name="app.update.mode"                 type="int"/>
-
-      <preference id="app.update.disable_button.showUpdateHistory"
-                  name="app.update.disable_button.showUpdateHistory"
-                  type="bool"/>
-
-#ifdef MOZ_MAINTENANCE_SERVICE
-      <preference id="app.update.service.enabled"
-                  name="app.update.service.enabled"
-                  type="bool"/>
-#endif
-#endif
-
-      <preference id="browser.search.update"           name="browser.search.update"           type="bool"/>
-
-      <!-- Certificates tab -->
-      <preference id="security.default_personal_cert"  name="security.default_personal_cert"  type="string"/>
-
-      <preference id="security.disable_button.openCertManager"
-                  name="security.disable_button.openCertManager"
-                  type="bool"/>
-      <preference id="security.disable_button.openDeviceManager"
-                  name="security.disable_button.openDeviceManager"
-                  type="bool"/>
-      <preference id="security.OCSP.enabled"
-                  name="security.OCSP.enabled"
-                  type="int"/>
-    </preferences>
-
-#ifdef HAVE_SHELL_SERVICE
-    <stringbundle id="bundleShell" src="chrome://browser/locale/shellservice.properties"/>
-    <stringbundle id="bundleBrand" src="chrome://branding/locale/brand.properties"/>
-#endif
-    <stringbundle id="bundlePreferences" src="chrome://instantbird/locale/preferences/preferences.properties"/>
-
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/advanced.js"/>
-
-    <tabbox id="advancedPrefs" flex="1"
-            onselect="gAdvancedPane.tabSelectionChanged();">
-
-      <tabs id="tabsElement">
-        <tab id="generalTab" label="&generalTab.label;"/>
-        <tab id="networkTab" label="&networkTab.label;"/>
-        <tab id="updateTab" label="&updateTab.label;"/>
-        <tab id="encryptionTab" label="&certificateTab.label;"/>
-      </tabs>
-
-      <tabpanels flex="1">
-
-        <!-- General -->
-        <tabpanel id="generalPanel" orient="vertical">
-
-          <!-- Accessibility -->
-          <groupbox id="accessibilityGroup" align="start">
-            <caption label="&accessibility.label;"/>
-
-            <checkbox id="useCursorNavigation"
-                      label="&useCursorNavigation.label;"
-                      accesskey="&useCursorNavigation.accesskey;"
-                      preference="accessibility.browsewithcaret"/>
-            <checkbox id="searchStartTyping"
-                      label="&searchStartTyping.label;"
-                      accesskey="&searchStartTyping.accesskey;"
-                      preference="accessibility.typeaheadfind"/>
-          </groupbox>
-
-          <!-- Conversations -->
-          <groupbox id="conversationsGroup" align="start">
-            <caption label="&conversations.label;"/>
-
-            <checkbox id="useAutoScroll"
-                      label="&useAutoScroll.label;"
-                      accesskey="&useAutoScroll.accesskey;"
-                      preference="general.autoScroll"/>
-            <checkbox id="useSmoothScrolling"
-                      label="&useSmoothScrolling.label;"
-                      accesskey="&useSmoothScrolling.accesskey;"
-                      preference="general.smoothScroll"/>
-            <checkbox id="allowHWAccel"
-                      label="&allowHWAccel.label;"
-                      accesskey="&allowHWAccel.accesskey;"
-                      preference="layers.acceleration.disabled"/>
-            <checkbox id="checkSpelling"
-                      label="&checkSpelling.label;"
-                      accesskey="&checkSpelling.accesskey;"
-                      onsyncfrompreference="return gAdvancedPane.readCheckSpelling();"
-                      onsynctopreference="return gAdvancedPane.writeCheckSpelling();"
-                      preference="layout.spellcheckDefault"/>
-          </groupbox>
-
-          <!-- Search engines -->
-          <groupbox id="searchEnginesGroup" orient="horizontal" align="center">
-            <caption label="&searchEnginesGroup.label;"/>
-
-            <description control="manageSearchEnginesButton"
-                         flex="1">&searchEnginesDesc.label;</description>
-            <button id="manageSearchEnginesButton" label="&searchEngines.label;"
-                    accesskey="&searchEngines.accesskey;"
-                    oncommand="gAdvancedPane.showSearchEngineManager();"/>
-          </groupbox>
-
-          <!-- Advanced Configuration -->
-          <groupbox>
-            <caption label="&configEditDesc.label;"/>
-            <hbox pack="end">
-              <button id="configEditor" label="&configEdit.label;"
-                      accesskey="&configEdit.accesskey;"
-                      oncommand="gAdvancedPane.showConfigEdit();"/>
-            </hbox>
-          </groupbox>
-        </tabpanel>
-
-        <!-- Network -->
-        <tabpanel id="networkPanel" orient="vertical">
-
-           <!-- Connection -->
-           <groupbox id="connectionGroup">
-             <caption label="&connection.label;"/>
-
-             <hbox id="connectionGroupHeader" align="center">
-               <image style="padding-right: 1em;" src="chrome://global/skin/icons/information-32.png"/>
-               <vbox>
-                 <description flex="1">&connectionInfoDesc.label;</description>
-                 <description flex="1">&connectionDesc.label;</description>
-               </vbox>
-             </hbox>
-
-             <separator id="connectionGroupSeparator" class="thin"/>
-
-             <hbox align="center" id="purpleConnectionBox">
-               <description flex="1" control="connectionSettingsPurple">&connectionLibpurpleDesc.label;</description>
-               <button id="connectionSettingsPurple" icon="network" label="&connectionSettings.label;"
-                       accesskey="&connectionSettings.accesskey;"
-                       oncommand="gAdvancedPane.showProxies();"/>
-             </hbox>
-
-             <hbox align="center" id="mozillaConnectionBox">
-               <description id="mozConnLabelWithoutLibpurple" flex="1" control="connectionSettings">&connectionDesc.label;</description>
-               <description id="mozConnLabelWithLibpurple" flex="1" control="connectionSettings">&connectionOtherDesc.label;</description>
-               <button id="connectionSettings" icon="network" label="&connectionSettings.label;"
-                       accesskey="&connectionSettings2.accesskey;"
-                       oncommand="gAdvancedPane.showConnections();"/>
-             </hbox>
-           </groupbox>
-
-           <!-- Porting Note:
-              - The Cache and Offline apps section (+ related strings and
-              - JavaScript methods) have been removed. -->
-        </tabpanel>
-
-        <!-- Update -->
-        <tabpanel id="updatePanel" orient="vertical">
-#ifdef MOZ_UPDATER
-          <groupbox id="updateApp">
-            <caption label="&updateApp.label;"/>
-            <radiogroup id="updateRadioGroup"
-                        oncommand="gAdvancedPane.updateWritePrefs();">
-              <radio id="autoDesktop"
-                     value="auto"
-                     label="&updateAuto1.label;"
-                     accesskey="&updateAuto1.accesskey;"/>
-              <hbox class="indent">
-                <checkbox id="warnIncompatible"
-                          label="&updateAutoAddonWarn.label;"
-                          accesskey="&updateAutoAddonWarn.accesskey;"
-                          preference="app.update.mode"
-                          onsyncfrompreference="return gAdvancedPane.readAddonWarn();"
-                          onsynctopreference="return gAdvancedPane.writeAddonWarn();"/>
-              </hbox>
-              <radio value="checkOnly"
-                     label="&updateCheck.label;"
-                     accesskey="&updateCheck.accesskey;"/>
-              <radio value="manual"
-                     label="&updateManual.label;"
-                     accesskey="&updateManual.accesskey;"/>
-            </radiogroup>
-
-            <hbox>
-              <button id="showUpdateHistory"
-                      label="&updateHistory.label;"
-                      accesskey="&updateHistory.accesskey;"
-                      preference="app.update.disable_button.showUpdateHistory"
-                      oncommand="gAdvancedPane.showUpdates();"/>
-            </hbox>
-
-#ifdef MOZ_MAINTENANCE_SERVICE
-            <checkbox id="useService"
-                      label="&useService.label;"
-                      accesskey="&useService.accesskey;"
-                      preference="app.update.service.enabled"/>
-#endif
-          </groupbox>
-#endif
-          <groupbox id="updateOthers">
-            <caption label="&updateOthers.label;"/>
-            <checkbox id="enableSearchUpdate"
-                      label="&enableSearchUpdate.label;"
-                      accesskey="&enableSearchUpdate.accesskey;"
-                      preference="browser.search.update"/>
-          </groupbox>
-        </tabpanel>
-
-        <!-- Certificates -->
-        <tabpanel id="encryptionPanel" orient="vertical">
-
-            <description id="CertSelectionDesc" control="certSelection">&certSelection.description;</description>
-
-            <!--
-              The values on these radio buttons may look like l12y issues, but
-              they're not - this preference uses *those strings* as its values.
-              I KID YOU NOT.
-            -->
-            <radiogroup id="certSelection" orient="horizontal" preftype="string"
-                        preference="security.default_personal_cert"
-                        aria-labelledby="CertSelectionDesc">
-              <radio label="&certs.auto;" accesskey="&certs.auto.accesskey;"
-                     value="Select Automatically"/>
-              <radio label="&certs.ask;" accesskey="&certs.ask.accesskey;"
-                     value="Ask Every Time"/>
-            </radiogroup>
-
-            <separator/>
-
-            <checkbox id="enableOCSP"
-                      label="&enableOCSP.label;"
-                      accesskey="&enableOCSP.accesskey;"
-                      onsyncfrompreference="return gAdvancedPane.readEnableOCSP();"
-                      onsynctopreference="return gAdvancedPane.writeEnableOCSP();"
-                      preference="security.OCSP.enabled"/>
-
-            <separator/>
-
-            <hbox>
-              <button id="viewCertificatesButton"
-                      label="&viewCerts.label;" accesskey="&viewCerts.accesskey;"
-                      oncommand="gAdvancedPane.showCertificates();"
-                      preference="security.disable_button.openCertManager"/>
-              <button id="viewSecurityDevicesButton"
-                      label="&viewSecurityDevices.label;" accesskey="&viewSecurityDevices.accesskey;"
-                      oncommand="gAdvancedPane.showSecurityDevices();"
-                      preference="security.disable_button.openDeviceManager"/>
-            </hbox>
-        </tabpanel>
-
-      </tabpanels>
-    </tabbox>
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/im/content/preferences/applicationManager.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var gAppManagerDialog = {
-  _removed: [],
-
-  init: function appManager_init() {
-    this.handlerInfo = window.arguments[0];
-
-    var bundle = document.getElementById("appManagerBundle");
-    var contentText;
-    var description = gApplicationsPane._describeType(this.handlerInfo);
-    var key =
-      (this.handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) ? "handleFile"
-                                                                      : "handleProtocol";
-    contentText = bundle.getFormattedString(key, [description]);
-    contentText = bundle.getFormattedString("descriptionApplications", [contentText]);
-    document.getElementById("appDescription").textContent = contentText;
-
-    var list = document.getElementById("appList");
-    var apps = this.handlerInfo.possibleApplicationHandlers.enumerate();
-    while (apps.hasMoreElements()) {
-      let app = apps.getNext();
-      if (!gApplicationsPane.isValidHandlerApp(app))
-        continue;
-
-      app.QueryInterface(Ci.nsIHandlerApp);
-      var item = list.appendItem(app.name);
-      item.setAttribute("image", gApplicationsPane._getIconURLForHandlerApp(app));
-      item.className = "listitem-iconic";
-      item.app = app;
-    }
-
-    list.selectedIndex = 0;
-  },
-
-  onOK: function appManager_onOK() {
-    if (!this._removed.length) {
-      // return early to avoid calling the |store| method.
-      return;
-    }
-
-    for (var i = 0; i < this._removed.length; ++i)
-      this.handlerInfo.removePossibleApplicationHandler(this._removed[i]);
-
-    this.handlerInfo.store();
-  },
-
-  onCancel: function appManager_onCancel() {
-    // do nothing
-  },
-
-  remove: function appManager_remove() {
-    var list = document.getElementById("appList");
-    this._removed.push(list.selectedItem.app);
-    var index = list.selectedIndex;
-    list.removeItemAt(index);
-    if (list.getRowCount() == 0) {
-      // The list is now empty, make the bottom part disappear
-      document.getElementById("appDetails").hidden = true;
-    }
-    else {
-      // Select the item at the same index, if we removed the last
-      // item of the list, select the previous item
-      if (index == list.getRowCount())
-        --index;
-      list.selectedIndex = index;
-    }
-  },
-
-  onSelect: function appManager_onSelect() {
-    var list = document.getElementById("appList");
-    if (!list.selectedItem) {
-      document.getElementById("remove").disabled = true;
-      return;
-    }
-    document.getElementById("remove").disabled = false;
-    var app = list.selectedItem.app;
-    var address = "";
-    if (app instanceof Ci.nsILocalHandlerApp)
-      address = app.executable.path;
-    else if (app instanceof Ci.nsIWebHandlerApp)
-      address = app.uriTemplate;
-    else if (app instanceof Ci.nsIWebContentHandlerInfo)
-      address = app.uri;
-    document.getElementById("appLocation").value = address;
-    var bundle = document.getElementById("appManagerBundle");
-    var appType = app instanceof Ci.nsILocalHandlerApp ? "descriptionLocalApp"
-                                                       : "descriptionWebApp";
-    document.getElementById("appType").value = bundle.getString(appType);
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/applicationManager.xul
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/"?>
-
-<!DOCTYPE dialog SYSTEM "chrome://instantbird/locale/preferences/applicationManager.dtd">
-
-<dialog id="appManager"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        buttons="accept,cancel"
-        onload="gAppManagerDialog.init();"
-        ondialogaccept="gAppManagerDialog.onOK();"
-        ondialogcancel="gAppManagerDialog.onCancel();"
-        title="&appManager.title;"
-        style="&appManager.style;"
-        persist="screenX screenY">
-
-  <script type="application/javascript"
-          src="chrome://instantbird/content/preferences/applicationManager.js"/>
-  <script type="application/javascript"
-          src="chrome://instantbird/content/preferences/applications.js"/>
-
-  <commandset id="appManagerCommandSet">
-    <command id="cmd_remove"
-             oncommand="gAppManagerDialog.remove();"
-             disabled="true"/>
-  </commandset>
-
-  <keyset id="appManagerKeyset">
-    <key id="delete" keycode="VK_DELETE" command="cmd_remove"/>
-  </keyset>
-
-  <stringbundleset id="appManagerBundleset">
-    <stringbundle id="appManagerBundle"
-                  src="chrome://instantbird/locale/preferences/applicationManager.properties"/>
-  </stringbundleset>
-
-  <description id="appDescription"/>
-  <separator class="thin"/>
-  <hbox flex="1">
-    <listbox id="appList" onselect="gAppManagerDialog.onSelect();" flex="1"/>
-    <vbox>
-      <button id="remove"
-              label="&remove.label;"
-              accesskey="&remove.accesskey;"
-              command="cmd_remove"/>
-      <spacer flex="1"/>
-    </vbox>
-  </hbox>
-  <vbox id="appDetails">
-    <separator class="thin"/>
-    <label id="appType"/>
-    <textbox id="appLocation" readonly="true" class="plain"/>
-  </vbox>
-</dialog>
deleted file mode 100644
--- a/im/content/preferences/applications.js
+++ /dev/null
@@ -1,1133 +0,0 @@
-/*
-# -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-//****************************************************************************//
-// Constants & Enumeration Values
-
-/*
-#ifdef MOZ_WIDGET_GTK
-*/
-var ICON_URL_APP      = "moz-icon://dummy.exe?size=16";
-/*
-#else
-*/
-var ICON_URL_APP      = "chrome://instantbird/skin/preferences/application.png";
-/*
-#endif
-*/
-
-// For CSS. Can be one of "ask" or "save". If absent, the icon URL
-// was set by us to a custom handler icon and CSS should not try to override it.
-var APP_ICON_ATTR_NAME = "appHandlerIcon";
-
-//****************************************************************************//
-// Utilities
-
-function getDisplayNameForFile(aFile) {
-/*
-#ifdef XP_WIN
-*/
-  if (aFile instanceof Ci.nsILocalFileWin) {
-    try {
-      return aFile.getVersionInfoField("FileDescription"); 
-    }
-    catch(ex) {
-      // fall through to the file name
-    }
-  }
-/*
-#endif
-#ifdef XP_MACOSX
-*/
-  if (aFile instanceof Ci.nsILocalFileMac) {
-    try {
-      return aFile.bundleDisplayName;
-    }
-    catch(ex) {
-      // fall through to the file name
-    }
-  }
-/*
-#endif
-*/
-
-  return Services.io.newFileURI(aFile).QueryInterface(Ci.nsIURL).fileName;
-}
-
-function getLocalHandlerApp(aFile) {
-  var localHandlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
-                        createInstance(Ci.nsILocalHandlerApp);
-  localHandlerApp.name = getDisplayNameForFile(aFile);
-  localHandlerApp.executable = aFile;
-
-  return localHandlerApp;
-}
-
-/**
- * An enumeration of items in a JS array.
- *
- * FIXME: use ArrayConverter once it lands (bug 380839).
- * 
- * @constructor
- */
-function ArrayEnumerator(aItems) {
-  this._index = 0;
-  this._contents = aItems;
-}
-
-ArrayEnumerator.prototype = {
-  _index: 0,
-
-  hasMoreElements: function() {
-    return this._index < this._contents.length;
-  },
-
-  getNext: function() {
-    return this._contents[this._index++];
-  }
-};
-
-//****************************************************************************//
-// HandlerInfoWrapper
-
-/**
- * This object wraps nsIHandlerInfo with some additional functionality
- * the Applications prefpane needs to display and allow modification of
- * the list of handled types.
- * 
- * We create an instance of this wrapper for each entry we might display
- * in the prefpane, and we compose the instances from the handler service.
- *
- * We don't implement all the original nsIHandlerInfo functionality,
- * just the stuff that the prefpane needs.
- * 
- * In theory, all of the custom functionality in this wrapper should get
- * pushed down into nsIHandlerInfo eventually.
- */
-function HandlerInfoWrapper(aType, aHandlerInfo) {
-  this._type = aType;
-  this.wrappedHandlerInfo = aHandlerInfo;
-}
-
-HandlerInfoWrapper.prototype = {
-  // The wrapped nsIHandlerInfo object.  In general, this object is private,
-  // but there are a couple cases where callers access it directly for things
-  // we haven't (yet?) implemented, so we make it a public property.
-  wrappedHandlerInfo: null,
-
-
-  //**************************************************************************//
-  // Convenience Utils
-
-  _handlerSvc: Cc["@mozilla.org/uriloader/handler-service;1"].
-               getService(Ci.nsIHandlerService),
-
-  _categoryMgr: Cc["@mozilla.org/categorymanager;1"].
-                getService(Ci.nsICategoryManager),
-
-  element: function(aID) {
-    return document.getElementById(aID);
-  },
-
-
-  //**************************************************************************//
-  // nsIHandlerInfo
-
-  // The MIME type or protocol scheme.
-  _type: null,
-  get type() {
-    return this._type;
-  },
-
-  get description() {
-    if (this.wrappedHandlerInfo.description)
-      return this.wrappedHandlerInfo.description;
-
-    if (this.primaryExtension) {
-      var extension = this.primaryExtension.toUpperCase();
-      return this.element("bundlePreferences").getFormattedString("fileEnding",
-                                                                  [extension]);
-    }
-
-    return this.type;
-  },
-
-  get preferredApplicationHandler() {
-    return this.wrappedHandlerInfo.preferredApplicationHandler;
-  },
-
-  set preferredApplicationHandler(aNewValue) {
-    this.wrappedHandlerInfo.preferredApplicationHandler = aNewValue;
-
-    // Make sure the preferred handler is in the set of possible handlers.
-    if (aNewValue)
-      this.addPossibleApplicationHandler(aNewValue);
-  },
-
-  get possibleApplicationHandlers() {
-    return this.wrappedHandlerInfo.possibleApplicationHandlers;
-  },
-
-  addPossibleApplicationHandler: function(aNewHandler) {
-    var possibleApps = this.possibleApplicationHandlers.enumerate();
-    while (possibleApps.hasMoreElements()) {
-      if (possibleApps.getNext().equals(aNewHandler))
-        return;
-    }
-    this.possibleApplicationHandlers.appendElement(aNewHandler);
-  },
-
-  removePossibleApplicationHandler: function(aHandler) {
-    var defaultApp = this.preferredApplicationHandler;
-    if (defaultApp && aHandler.equals(defaultApp)) {
-      // If the app we remove was the default app, we must make sure
-      // it won't be used anymore
-      this.alwaysAskBeforeHandling = true;
-      this.preferredApplicationHandler = null;
-    }
-
-    var handlers = this.possibleApplicationHandlers;
-    for (var i = 0; i < handlers.length; ++i) {
-      var handler = handlers.queryElementAt(i, Ci.nsIHandlerApp);
-      if (handler.equals(aHandler)) {
-        handlers.removeElementAt(i);
-        break;
-      }
-    }
-  },
-
-  get hasDefaultHandler() {
-    return this.wrappedHandlerInfo.hasDefaultHandler;
-  },
-
-  get defaultDescription() {
-    return this.wrappedHandlerInfo.defaultDescription;
-  },
-
-  // What to do with content of this type.
-  get preferredAction() {
-    // If the action is to use a helper app, but we don't have a preferred
-    // handler app, then switch to using the system default, if any; otherwise
-    // fall back to saving to disk, which is the default action in nsMIMEInfo.
-    // Note: "save to disk" is an invalid value for protocol info objects,
-    // but the alwaysAskBeforeHandling getter will detect that situation
-    // and always return true in that case to override this invalid value.
-    if (this.wrappedHandlerInfo.preferredAction == Ci.nsIHandlerInfo.useHelperApp &&
-        !gApplicationsPane.isValidHandlerApp(this.preferredApplicationHandler)) {
-      if (this.wrappedHandlerInfo.hasDefaultHandler)
-        return Ci.nsIHandlerInfo.useSystemDefault;
-      else
-        return Ci.nsIHandlerInfo.saveToDisk;
-    }
-
-    return this.wrappedHandlerInfo.preferredAction;
-  },
-
-  set preferredAction(aNewValue) {
-    this.wrappedHandlerInfo.preferredAction = aNewValue;
-  },
-
-  get alwaysAskBeforeHandling() {
-    // If this is a protocol type and the preferred action is "save to disk",
-    // which is invalid for such types, then return true here to override that
-    // action.  This could happen when the preferred action is to use a helper
-    // app, but the preferredApplicationHandler is invalid, and there isn't
-    // a default handler, so the preferredAction getter returns save to disk
-    // instead.
-    if (!(this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) &&
-        this.preferredAction == Ci.nsIHandlerInfo.saveToDisk)
-      return true;
-
-    return this.wrappedHandlerInfo.alwaysAskBeforeHandling;
-  },
-
-  set alwaysAskBeforeHandling(aNewValue) {
-    this.wrappedHandlerInfo.alwaysAskBeforeHandling = aNewValue;
-  },
-
-
-  //**************************************************************************//
-  // nsIMIMEInfo
-
-  // The primary file extension associated with this type, if any.
-  get primaryExtension() {
-    try {
-      if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
-          this.wrappedHandlerInfo.primaryExtension)
-        return this.wrappedHandlerInfo.primaryExtension;
-    } catch(ex) {}
-
-    return null;
-  },
-
-  //**************************************************************************//
-  // Storage
-
-  store: function() {
-    this._handlerSvc.store(this.wrappedHandlerInfo);
-  },
-
-
-  //**************************************************************************//
-  // Icons
-
-  get smallIcon() {
-    return this._getIcon(16);
-  },
-
-  get largeIcon() {
-    return this._getIcon(32);
-  },
-
-  _getIcon: function(aSize) {
-    if (this.primaryExtension)
-      return "moz-icon://goat." + this.primaryExtension + "?size=" + aSize;
-
-    if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo)
-      return "moz-icon://goat?size=" + aSize + "&contentType=" + this.type;
-
-    // FIXME: consider returning some generic icon when we can't get a URL for
-    // one (for example in the case of protocol schemes).  Filed as bug 395141.
-    return null;
-  }
-
-};
-
-//****************************************************************************//
-// Prefpane Controller
-
-var gApplicationsPane = {
-  // The set of types the app knows how to handle.  A hash of HandlerInfoWrapper
-  // objects, indexed by type.
-  _handledTypes: {},
-  
-  // The list of types we can show, sorted by the sort column/direction.
-  // An array of HandlerInfoWrapper objects.  We build this list when we first
-  // load the data and then rebuild it when users change a pref that affects
-  // what types we can show or change the sort column/direction.
-  // Note: this isn't necessarily the list of types we *will* show; if the user
-  // provides a filter string, we'll only show the subset of types in this list
-  // that match that string.
-  _visibleTypes: [],
-
-  // A count of the number of times each visible type description appears.
-  // We use these counts to determine whether or not to annotate descriptions
-  // with their types to distinguish duplicate descriptions from each other.
-  // A hash of integer counts, indexed by string description.
-  _visibleTypeDescriptionCount: {},
-
-
-  //**************************************************************************//
-  // Convenience & Performance Shortcuts
-
-  // These get defined by init().
-  _brandShortName : null,
-  _prefsBundle    : null,
-  _list           : null,
-  _filter         : null,
-
-  _mimeSvc      : Cc["@mozilla.org/mime;1"].
-                  getService(Ci.nsIMIMEService),
-
-  _helperAppSvc : Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
-                  getService(Ci.nsIExternalHelperAppService),
-
-  _handlerSvc   : Cc["@mozilla.org/uriloader/handler-service;1"].
-                  getService(Ci.nsIHandlerService),
-
-
-  //**************************************************************************//
-  // Initialization & Destruction
-
-  init: function() {
-    // Initialize shortcuts to some commonly accessed elements & values.
-    this._brandShortName =
-      document.getElementById("bundleBrand").getString("brandShortName");
-    this._prefsBundle = document.getElementById("bundlePreferences");
-    this._list = document.getElementById("handlersView");
-    this._filter = document.getElementById("filter");
-
-    // Listen for window unload so we can remove our preference observers.
-    window.addEventListener("unload", this);
-
-    // Figure out how we should be sorting the list.  We persist sort settings
-    // across sessions, so we can't assume the default sort column/direction.
-    // XXX should we be using the XUL sort service instead?
-    if (document.getElementById("actionColumn").hasAttribute("sortDirection")) {
-      this._sortColumn = document.getElementById("actionColumn");
-      // The typeColumn element always has a sortDirection attribute,
-      // either because it was persisted or because the default value
-      // from the xul file was used.  If we are sorting on the other
-      // column, we should remove it.
-      document.getElementById("typeColumn").removeAttribute("sortDirection");
-    }
-    else 
-      this._sortColumn = document.getElementById("typeColumn");
-
-    // Load the data and build the list of handlers.
-    // By doing this in a timeout, we let the preferences dialog resize itself
-    // to an appropriate size before we add a bunch of items to the list.
-    // Otherwise, if there are many items, and the Applications prefpane
-    // is the one that gets displayed when the user first opens the dialog,
-    // the dialog might stretch too much in an attempt to fit them all in.
-    // XXX Shouldn't we perhaps just set a max-height on the richlistbox?
-    var _delayedPaneLoad = function(self) {
-      self._loadData();
-      self._rebuildVisibleTypes();
-      self._sortVisibleTypes();
-      self._rebuildView();
-
-      // Notify observers that the UI is now ready
-      Services.obs.notifyObservers(window, "app-handler-pane-loaded", null);
-    };
-    setTimeout(_delayedPaneLoad, 0, this);
-  },
-
-  destroy: function() {
-    window.removeEventListener("unload", this, false);
-  },
-
-
-  //**************************************************************************//
-  // nsISupports
-
-  QueryInterface: function(aIID) {
-    if (aIID.equals(Ci.nsIObserver) ||
-        aIID.equals(Ci.nsIDOMEventListener ||
-        aIID.equals(Ci.nsISupports)))
-      return this;
-
-    throw Cr.NS_ERROR_NO_INTERFACE;
-  },
-
-
-  //**************************************************************************//
-  // nsIObserver
-
-  observe: function (aSubject, aTopic, aData) {
-    // Rebuild the list when there are changes to preferences that influence
-    // whether or not to show certain entries in the list.
-    if (aTopic == "nsPref:changed" && !this._storingAction) {
-      // All the prefs we observe can affect what we display, so we rebuild
-      // the view when any of them changes.
-      this._rebuildView();
-    }
-  },
-
-
-  //**************************************************************************//
-  // nsIDOMEventListener
-
-  handleEvent: function(aEvent) {
-    if (aEvent.type == "unload") {
-      this.destroy();
-    }
-  },
-
-
-  //**************************************************************************//
-  // Composed Model Construction
-
-  _loadData: function() {
-    this._loadApplicationHandlers();
-  },
-
-  /**
-   * Load the set of handlers defined by the application datastore.
-   */
-  _loadApplicationHandlers: function() {
-    var wrappedHandlerInfos = this._handlerSvc.enumerate();
-    while (wrappedHandlerInfos.hasMoreElements()) {
-      let wrappedHandlerInfo =
-        wrappedHandlerInfos.getNext().QueryInterface(Ci.nsIHandlerInfo);
-      let type = wrappedHandlerInfo.type;
-
-      let handlerInfoWrapper;
-      if (type in this._handledTypes)
-        handlerInfoWrapper = this._handledTypes[type];
-      else {
-        handlerInfoWrapper = new HandlerInfoWrapper(type, wrappedHandlerInfo);
-        this._handledTypes[type] = handlerInfoWrapper;
-      }
-
-      handlerInfoWrapper.handledOnlyByPlugin = false;
-    }
-  },
-
-
-  //**************************************************************************//
-  // View Construction
-
-  _rebuildVisibleTypes: function() {
-    // Reset the list of visible types and the visible type description counts.
-    this._visibleTypes = [];
-    this._visibleTypeDescriptionCount = {};
-
-    for (let type in this._handledTypes) {
-      let handlerInfo = this._handledTypes[type];
-
-      // Hide types handled only by plugins.
-      if (handlerInfo.handledOnlyByPlugin)
-        continue;
-
-      // We couldn't find any reason to exclude the type, so include it.
-      this._visibleTypes.push(handlerInfo);
-
-      if (handlerInfo.description in this._visibleTypeDescriptionCount)
-        this._visibleTypeDescriptionCount[handlerInfo.description]++;
-      else
-        this._visibleTypeDescriptionCount[handlerInfo.description] = 1;
-    }
-  },
-
-  _rebuildView: function() {
-    // Clear the list of entries.
-    while (this._list.childNodes.length > 1)
-      this._list.lastChild.remove();
-
-    var visibleTypes = this._visibleTypes;
-
-    // If the user is filtering the list, then only show matching types.
-    if (this._filter.value)
-      visibleTypes = visibleTypes.filter(this._matchesFilter, this);
-
-    for (let visibleType of visibleTypes) {
-      let item = document.createElement("richlistitem");
-      item.setAttribute("type", visibleType.type);
-      item.setAttribute("typeDescription", this._describeType(visibleType));
-      if (visibleType.smallIcon)
-        item.setAttribute("typeIcon", visibleType.smallIcon);
-      item.setAttribute("actionDescription",
-                        this._describePreferredAction(visibleType));
-
-      if (!this._setIconClassForPreferredAction(visibleType, item)) {
-        item.setAttribute("actionIcon",
-                          this._getIconURLForPreferredAction(visibleType));
-      }
-
-      this._list.appendChild(item);
-    }
-
-    this._selectLastSelectedType();
-  },
-
-  _matchesFilter: function(aType) {
-    var filterValue = this._filter.value.toLowerCase();
-    return this._describeType(aType).toLowerCase().includes(filterValue) ||
-           this._describePreferredAction(aType).toLowerCase().includes(filterValue);
-  },
-
-  /**
-   * Describe, in a human-readable fashion, the type represented by the given
-   * handler info object.  Normally this is just the description provided by
-   * the info object, but if more than one object presents the same description,
-   * then we annotate the duplicate descriptions with the type itself to help
-   * users distinguish between those types.
-   *
-   * @param aHandlerInfo {nsIHandlerInfo} the type being described
-   * @returns {string} a description of the type
-   */
-  _describeType: function(aHandlerInfo) {
-    if (this._visibleTypeDescriptionCount[aHandlerInfo.description] > 1)
-      return this._prefsBundle.getFormattedString("typeDescriptionWithType",
-                                                  [aHandlerInfo.description,
-                                                   aHandlerInfo.type]);
-
-    return aHandlerInfo.description;
-  },
-
-  /**
-   * Describe, in a human-readable fashion, the preferred action to take on
-   * the type represented by the given handler info object.
-   *
-   * XXX Should this be part of the HandlerInfoWrapper interface?  It would
-   * violate the separation of model and view, but it might make more sense
-   * nonetheless (f.e. it would make sortTypes easier).
-   *
-   * @param aHandlerInfo {nsIHandlerInfo} the type whose preferred action
-   *                                      is being described
-   * @returns {string} a description of the action
-   */
-  _describePreferredAction: function(aHandlerInfo) {
-    // alwaysAskBeforeHandling overrides the preferred action, so if that flag
-    // is set, then describe that behavior instead.  This is
-    // the "alwaysAsk" string.
-    if (aHandlerInfo.alwaysAskBeforeHandling)
-      return this._prefsBundle.getString("alwaysAsk");
-
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.saveToDisk:
-        return this._prefsBundle.getString("saveFile");
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        var preferredApp = aHandlerInfo.preferredApplicationHandler;
-        var name;
-        if (preferredApp instanceof Ci.nsILocalHandlerApp)
-          name = getDisplayNameForFile(preferredApp.executable);
-        else
-          name = preferredApp.name;
-        return this._prefsBundle.getFormattedString("useApp", [name]);
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        // handleInternally looks like either useHelperApp
-        // or useSystemDefault depending on whether or not there's a preferred
-        // handler app.
-        if (this.isValidHandlerApp(aHandlerInfo.preferredApplicationHandler))
-          return aHandlerInfo.preferredApplicationHandler.name;
-
-        return aHandlerInfo.defaultDescription;
-
-        // XXX Why don't we say the app will handle the type internally?
-        // Is it because the app can't actually do that?  But if that's true,
-        // then why would a preferredAction ever get set to this value
-        // in the first place?
-
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        return this._prefsBundle.getFormattedString("useDefault",
-                                                    [aHandlerInfo.defaultDescription]);
-    }
-  },
-
-  _selectLastSelectedType: function() {
-    var lastSelectedType = this._list.getAttribute("lastSelectedType");
-    if (!lastSelectedType)
-      return;
-
-    var item = this._list.getElementsByAttribute("type", lastSelectedType)[0];
-    if (!item)
-      return;
-
-    this._list.selectedItem = item;
-  },
-
-  /**
-   * Whether or not the given handler app is valid.
-   *
-   * @param aHandlerApp {nsIHandlerApp} the handler app in question
-   *
-   * @returns {boolean} whether or not it's valid
-   */
-  isValidHandlerApp: function(aHandlerApp) {
-    if (!aHandlerApp)
-      return false;
-
-    if (aHandlerApp instanceof Ci.nsILocalHandlerApp)
-      return this._isValidHandlerExecutable(aHandlerApp.executable);
-
-    if (aHandlerApp instanceof Ci.nsIWebHandlerApp)
-      return aHandlerApp.uriTemplate;
-
-    if (aHandlerApp instanceof Ci.nsIWebContentHandlerInfo)
-      return aHandlerApp.uri;
-
-    return false;
-  },
-
-  _isValidHandlerExecutable: function(aExecutable) {
-    return aExecutable &&
-           aExecutable.exists() &&
-           aExecutable.isExecutable() &&
-// XXXben - we need to compare this with the running instance executable
-//          just don't know how to do that via script...
-// XXXmano TBD: can probably add this to nsIShellService
-#ifdef XP_WIN
-#expand    aExecutable.leafName != "__MOZ_APP_NAME__.exe";
-#else
-#ifdef XP_MACOSX
-#expand    aExecutable.leafName != "__MOZ_MACBUNDLE_NAME__.app";
-#else
-#expand    aExecutable.leafName != "__MOZ_APP_NAME__-bin";
-#endif
-#endif
-  },
-
-  /**
-   * Rebuild the actions menu for the selected entry.  Gets called by
-   * the richlistitem constructor when an entry in the list gets selected.
-   */
-  rebuildActionsMenu: function() {
-    var typeItem = this._list.selectedItem;
-    var handlerInfo = this._handledTypes[typeItem.type];
-    var menu =
-      document.getAnonymousElementByAttribute(typeItem, "class", "actionsMenu");
-    var menuPopup = menu.menupopup;
-
-    // Clear out existing items.
-    while (menuPopup.hasChildNodes())
-      menuPopup.lastChild.remove();
-
-    {
-      var askMenuItem = document.createElement("menuitem");
-      askMenuItem.setAttribute("alwaysAsk", "true");
-      let label = this._prefsBundle.getString("alwaysAsk");
-      askMenuItem.setAttribute("label", label);
-      askMenuItem.setAttribute("tooltiptext", label);
-      askMenuItem.setAttribute(APP_ICON_ATTR_NAME, "ask");
-      menuPopup.appendChild(askMenuItem);
-    }
-
-    // Create a menu item for saving to disk.
-    // Note: this option isn't available to protocol types, since we don't know
-    // what it means to save a URL having a certain scheme to disk.
-    if ((handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo)) {
-      var saveMenuItem = document.createElement("menuitem");
-      saveMenuItem.setAttribute("action", Ci.nsIHandlerInfo.saveToDisk);
-      let label = this._prefsBundle.getString("saveFile");
-      saveMenuItem.setAttribute("label", label);
-      saveMenuItem.setAttribute("tooltiptext", label);
-      saveMenuItem.setAttribute(APP_ICON_ATTR_NAME, "save");
-      menuPopup.appendChild(saveMenuItem);
-    }
-
-    // Add a separator to distinguish these items from the helper app items
-    // that follow them.
-    let menuItem = document.createElement("menuseparator");
-    menuPopup.appendChild(menuItem);
-
-    // Create a menu item for the OS default application, if any.
-    if (handlerInfo.hasDefaultHandler) {
-      var defaultMenuItem = document.createElement("menuitem");
-      defaultMenuItem.setAttribute("action", Ci.nsIHandlerInfo.useSystemDefault);
-      let label = this._prefsBundle.getFormattedString("useDefault",
-                                                       [handlerInfo.defaultDescription]);
-      defaultMenuItem.setAttribute("label", label);
-      defaultMenuItem.setAttribute("tooltiptext", handlerInfo.defaultDescription);
-      defaultMenuItem.setAttribute("image", this._getIconURLForSystemDefault(handlerInfo));
-
-      menuPopup.appendChild(defaultMenuItem);
-    }
-
-    // Create menu items for possible handlers.
-    let preferredApp = handlerInfo.preferredApplicationHandler;
-    let possibleApps = handlerInfo.possibleApplicationHandlers.enumerate();
-    var possibleAppMenuItems = [];
-    while (possibleApps.hasMoreElements()) {
-      let possibleApp = possibleApps.getNext();
-      if (!this.isValidHandlerApp(possibleApp))
-        continue;
-
-      let menuItem = document.createElement("menuitem");
-      menuItem.setAttribute("action", Ci.nsIHandlerInfo.useHelperApp);
-      let label;
-      if (possibleApp instanceof Ci.nsILocalHandlerApp)
-        label = getDisplayNameForFile(possibleApp.executable);
-      else
-        label = possibleApp.name;
-      label = this._prefsBundle.getFormattedString("useApp", [label]);
-      menuItem.setAttribute("label", label);
-      menuItem.setAttribute("tooltiptext", label);
-      menuItem.setAttribute("image", this._getIconURLForHandlerApp(possibleApp));
-
-      // Attach the handler app object to the menu item so we can use it
-      // to make changes to the datastore when the user selects the item.
-      menuItem.handlerApp = possibleApp;
-
-      menuPopup.appendChild(menuItem);
-      possibleAppMenuItems.push(menuItem);
-    }
-
-    // Create a menu item for selecting a local application.
-#ifdef XP_WIN
-    // On Windows, selecting an application to open another application
-    // would be meaningless so we special case executables.
-    var executableType = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService)
-                                                  .getTypeFromExtension("exe");
-    if (handlerInfo.type != executableType)
-#endif
-    {
-      let menuItem = document.createElement("menuitem");
-      menuItem.setAttribute("oncommand", "gApplicationsPane.chooseApp(event)");
-      let label = this._prefsBundle.getString("useOtherApp");
-      menuItem.setAttribute("label", label);
-      menuItem.setAttribute("tooltiptext", label);
-      menuPopup.appendChild(menuItem);
-    }
-
-    // Create a menu item for managing applications.
-    if (possibleAppMenuItems.length) {
-      let menuItem = document.createElement("menuseparator");
-      menuPopup.appendChild(menuItem);
-      menuItem = document.createElement("menuitem");
-      menuItem.setAttribute("oncommand", "gApplicationsPane.manageApp(event)");
-      menuItem.setAttribute("label", this._prefsBundle.getString("manageApp"));
-      menuPopup.appendChild(menuItem);
-    }
-
-    // Select the item corresponding to the preferred action.  If the always
-    // ask flag is set, it overrides the preferred action.  Otherwise we pick
-    // the item identified by the preferred action (when the preferred action
-    // is to use a helper app, we have to pick the specific helper app item).
-    if (handlerInfo.alwaysAskBeforeHandling)
-      menu.selectedItem = askMenuItem;
-    else switch (handlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.handleInternally:
-        menu.selectedItem = internalMenuItem;
-        break;
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        menu.selectedItem = defaultMenuItem;
-        break;
-      case Ci.nsIHandlerInfo.useHelperApp:
-        if (preferredApp)
-          menu.selectedItem = 
-            possibleAppMenuItems.filter(v => v.handlerApp.equals(preferredApp))[0];
-        break;
-      case Ci.nsIHandlerInfo.saveToDisk:
-        menu.selectedItem = saveMenuItem;
-        break;
-    }
-  },
-
-
-  //**************************************************************************//
-  // Sorting & Filtering
-
-  _sortColumn: null,
-
-  /**
-   * Sort the list when the user clicks on a column header.
-   */
-  sort: function (event) {
-    var column = event.target;
-
-    // If the user clicked on a new sort column, remove the direction indicator
-    // from the old column.
-    if (this._sortColumn && this._sortColumn != column)
-      this._sortColumn.removeAttribute("sortDirection");
-
-    this._sortColumn = column;
-
-    // Set (or switch) the sort direction indicator.
-    if (column.getAttribute("sortDirection") == "ascending")
-      column.setAttribute("sortDirection", "descending");
-    else
-      column.setAttribute("sortDirection", "ascending");
-
-    this._sortVisibleTypes();
-    this._rebuildView();
-  },
-
-  /**
-   * Sort the list of visible types by the current sort column/direction.
-   */
-  _sortVisibleTypes: function() {
-    if (!this._sortColumn)
-      return;
-
-    var t = this;
-
-    function sortByType(a, b) {
-      return t._describeType(a).toLowerCase().
-             localeCompare(t._describeType(b).toLowerCase());
-    }
-
-    function sortByAction(a, b) {
-      return t._describePreferredAction(a).toLowerCase().
-             localeCompare(t._describePreferredAction(b).toLowerCase());
-    }
-
-    switch (this._sortColumn.getAttribute("value")) {
-      case "type":
-        this._visibleTypes.sort(sortByType);
-        break;
-      case "action":
-        this._visibleTypes.sort(sortByAction);
-        break;
-    }
-
-    if (this._sortColumn.getAttribute("sortDirection") == "descending")
-      this._visibleTypes.reverse();
-  },
-
-  /**
-   * Filter the list when the user enters a filter term into the filter field.
-   */
-  filter: function() {
-    this._rebuildView();
-  },
-
-  focusFilterBox: function() {
-    this._filter.focus();
-    this._filter.select();
-  },
-
-
-  //**************************************************************************//
-  // Changes
-
-  onSelectAction: function(aActionItem) {
-    this._storingAction = true;
-
-    try {
-      this._storeAction(aActionItem);
-    }
-    finally {
-      this._storingAction = false;
-    }
-  },
-
-  _storeAction: function(aActionItem) {
-    var typeItem = this._list.selectedItem;
-    var handlerInfo = this._handledTypes[typeItem.type];
-
-    if (aActionItem.hasAttribute("alwaysAsk")) {
-      handlerInfo.alwaysAskBeforeHandling = true;
-    }
-    else if (aActionItem.hasAttribute("action")) {
-      let action = parseInt(aActionItem.getAttribute("action"));
-
-      // Set the preferred application handler.
-      // We leave the existing preferred app in the list when we set
-      // the preferred action to something other than useHelperApp so that
-      // legacy datastores that don't have the preferred app in the list
-      // of possible apps still include the preferred app in the list of apps
-      // the user can choose to handle the type.
-      if (action == Ci.nsIHandlerInfo.useHelperApp)
-        handlerInfo.preferredApplicationHandler = aActionItem.handlerApp;
-
-      // Set the "always ask" flag.
-      handlerInfo.alwaysAskBeforeHandling = false;
-
-      // Set the preferred action.
-      handlerInfo.preferredAction = action;
-    }
-
-    handlerInfo.store();
-
-    // Make sure the handler info object is flagged to indicate that there is
-    // now some user configuration for the type.
-    handlerInfo.handledOnlyByPlugin = false;
-
-    // Update the action label and image to reflect the new preferred action.
-    typeItem.setAttribute("actionDescription",
-                          this._describePreferredAction(handlerInfo));
-    if (!this._setIconClassForPreferredAction(handlerInfo, typeItem)) {
-      typeItem.setAttribute("actionIcon",
-                            this._getIconURLForPreferredAction(handlerInfo));
-    }
-  },
-
-  manageApp: function(aEvent) {
-    // Don't let the normal "on select action" handler get this event,
-    // as we handle it specially ourselves.
-    aEvent.stopPropagation();
-
-    var typeItem = this._list.selectedItem;
-    var handlerInfo = this._handledTypes[typeItem.type];
-
-    document.documentElement.openSubDialog("chrome://instantbird/content/preferences/applicationManager.xul",
-                                           "", handlerInfo);
-
-    // Rebuild the actions menu so that we revert to the previous selection,
-    // or "Always ask" if the previous default application has been removed
-    this.rebuildActionsMenu();
-
-    // update the richlistitem too. Will be visible when selecting another row
-    typeItem.setAttribute("actionDescription",
-                          this._describePreferredAction(handlerInfo));
-    if (!this._setIconClassForPreferredAction(handlerInfo, typeItem)) {
-      typeItem.setAttribute("actionIcon",
-                            this._getIconURLForPreferredAction(handlerInfo));
-    }
-  },
-
-  chooseApp: function(aEvent) {
-    // Don't let the normal "on select action" handler get this event,
-    // as we handle it specially ourselves.
-    aEvent.stopPropagation();
-
-    var handlerApp;
-    let onSelectionDone = () => {
-      // Rebuild the actions menu whether the user picked an app or canceled.
-      // If they picked an app, we want to add the app to the menu and select it.
-      // If they canceled, we want to go back to their previous selection.
-      this.rebuildActionsMenu();
-
-      // If the user picked a new app from the menu, select it.
-      if (handlerApp) {
-        let typeItem = this._list.selectedItem;
-        let actionsMenu =
-          document.getAnonymousElementByAttribute(typeItem, "class", "actionsMenu");
-        let menuItems = actionsMenu.menupopup.childNodes;
-        for (let i = 0; i < menuItems.length; i++) {
-          let menuItem = menuItems[i];
-          if (menuItem.handlerApp && menuItem.handlerApp.equals(handlerApp)) {
-            actionsMenu.selectedIndex = i;
-            this.onSelectAction(menuItem);
-            break;
-          }
-        }
-      }
-    }
-
-    if (AppConstants.platform == "win") {
-      var params = {};
-      var handlerInfo = this._handledTypes[this._list.selectedItem.type];
-
-      params.mimeInfo = handlerInfo.wrappedHandlerInfo;
-
-      params.title         = this._prefsBundle.getString("fpTitleChooseApp");
-      params.description   = handlerInfo.description;
-      params.filename      = null;
-      params.handlerApp    = null;
-
-      if (this._loadInContent) {
-        gSubDialog.open("chrome://global/content/appPicker.xul",
-                        "resizable=no", params);
-      } else {
-        window.openDialog("chrome://global/content/appPicker.xul", null,
-                          "chrome,modal,centerscreen,titlebar,dialog=yes",
-                          params);
-      };
-
-      if (params.handlerApp &&
-          params.handlerApp.executable &&
-          params.handlerApp.executable.isFile()) {
-        handlerApp = params.handlerApp;
-
-        // Add the app to the type's list of possible handlers.
-        handlerInfo.addPossibleApplicationHandler(handlerApp);
-      }
-      onSelectionDone();
-    } else {
-      const nsIFilePicker = Components.interfaces.nsIFilePicker;
-      let fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
-      let winTitle = this._prefsBundle.getString("fpTitleChooseApp");
-      fp.init(window, winTitle, nsIFilePicker.modeOpen);
-      fp.appendFilters(nsIFilePicker.filterApps);
-
-      // Prompt the user to pick an app.  If they pick one, and it's a valid
-      // selection, then add it to the list of possible handlers.
-
-      fp.open(rv => {
-        if (rv == nsIFilePicker.returnOK && fp.file &&
-            this._isValidHandlerExecutable(fp.file)) {
-          handlerApp = Components.classes["@mozilla.org/uriloader/local-handler-app;1"]
-                                 .createInstance(Components.interfaces.nsILocalHandlerApp);
-          handlerApp.name = getDisplayNameForFile(fp.file);
-          handlerApp.executable = fp.file;
-
-          // Add the app to the type's list of possible handlers.
-          let handlerInfo = this._handledTypes[this._list.selectedItem.type];
-          handlerInfo.addPossibleApplicationHandler(handlerApp);
-        }
-        onSelectionDone();
-      });
-    }
-  },
-
-  // Mark which item in the list was last selected so we can reselect it
-  // when we rebuild the list or when the user returns to the prefpane.
-  onSelectionChanged: function() {
-    if (this._list.selectedItem)
-      this._list.setAttribute("lastSelectedType",
-                              this._list.selectedItem.getAttribute("type"));
-  },
-
-  _setIconClassForPreferredAction: function(aHandlerInfo, aElement) {
-    // If this returns true, the attribute that CSS sniffs for was set to something
-    // so you shouldn't manually set an icon URI.
-    // This removes the existing actionIcon attribute if any, even if returning false.
-    aElement.removeAttribute("actionIcon");
-
-    if (aHandlerInfo.alwaysAskBeforeHandling) {
-      aElement.setAttribute(APP_ICON_ATTR_NAME, "ask");
-      return true;
-    }
-
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.saveToDisk:
-        aElement.setAttribute(APP_ICON_ATTR_NAME, "save");
-        return true;
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        break;
-    }
-    aElement.removeAttribute(APP_ICON_ATTR_NAME);
-    return false;
-  },
-
-  _getIconURLForPreferredAction: function(aHandlerInfo) {
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        return this._getIconURLForSystemDefault(aHandlerInfo);
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        let preferredApp = aHandlerInfo.preferredApplicationHandler;
-        if (this.isValidHandlerApp(preferredApp))
-          return this._getIconURLForHandlerApp(preferredApp);
-        break;
-
-      // This should never happen, but if preferredAction is set to some weird
-      // value, then fall back to the generic application icon.
-      default:
-        return ICON_URL_APP;
-    }
-  },
-
-  _getIconURLForHandlerApp: function(aHandlerApp) {
-    if (aHandlerApp instanceof Ci.nsILocalHandlerApp)
-      return this._getIconURLForFile(aHandlerApp.executable);
-
-    if (aHandlerApp instanceof Ci.nsIWebHandlerApp)
-      return this._getIconURLForWebApp(aHandlerApp.uriTemplate);
-
-    if (aHandlerApp instanceof Ci.nsIWebContentHandlerInfo)
-      return this._getIconURLForWebApp(aHandlerApp.uri);
-
-    // We know nothing about other kinds of handler apps.
-    return "";
-  },
-
-  _getIconURLForFile: function(aFile) {
-    var fph = Services.io.getProtocolHandler("file").
-              QueryInterface(Ci.nsIFileProtocolHandler);
-    var urlSpec = fph.getURLSpecFromFile(aFile);
-
-    return "moz-icon://" + urlSpec + "?size=16";
-  },
-
-  _getIconURLForWebApp: function(aWebAppURITemplate) {
-    var uri = Services.io.newURI(aWebAppURITemplate);
-
-    // Unfortunately we can't use the favicon service to get the favicon,
-    // because the service looks in the annotations table for a record with
-    // the exact URL we give it, and users won't have such records for URLs
-    // they don't visit, and users won't visit the web app's URL template,
-    // they'll only visit URLs derived from that template (i.e. with %s
-    // in the template replaced by the URL of the content being handled).
-
-    if (/^https?/.test(uri.scheme) && Services.prefs.getBoolPref("browser.chrome.favicons"))
-      return uri.prePath + "/favicon.ico";
-
-    return "";
-  },
-
-  _getIconURLForSystemDefault: function(aHandlerInfo) {
-    // Handler info objects for MIME types on some OSes implement a property bag
-    // interface from which we can get an icon for the default app, so if we're
-    // dealing with a MIME type on one of those OSes, then try to get the icon.
-    if ("wrappedHandlerInfo" in aHandlerInfo) {
-      let wrappedHandlerInfo = aHandlerInfo.wrappedHandlerInfo;
-
-      if (wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
-          wrappedHandlerInfo instanceof Ci.nsIPropertyBag) {
-        try {
-          let url = wrappedHandlerInfo.getProperty("defaultApplicationIconURL");
-          if (url)
-            return url + "?size=16";
-        }
-        catch(ex) {}
-      }
-    }
-
-    // If this isn't a MIME type object on an OS that supports retrieving
-    // the icon, or if we couldn't retrieve the icon for some other reason,
-    // then use a generic icon.
-    return ICON_URL_APP;
-  }
-
-};
deleted file mode 100644
--- a/im/content/preferences/applications.xul
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % applicationsDTD SYSTEM "chrome://instantbird/locale/preferences/applications.dtd">
-  %brandDTD;
-  %applicationsDTD;
-]>
-
-<overlay id="ApplicationsPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneApplications"
-            onpaneload="gApplicationsPane.init();"
-            flex="1">
-
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/applications.js"/>
-
-    <keyset>
-      <key key="&focusSearch1.key;" modifiers="accel" oncommand="gApplicationsPane.focusFilterBox();"/>
-      <key key="&focusSearch2.key;" modifiers="accel" oncommand="gApplicationsPane.focusFilterBox();"/>
-    </keyset>
-
-    <hbox>
-      <textbox id="filter" flex="1"
-               type="search"
-               emptytext="&filter.emptytext;"
-               aria-controls="handlersView"
-               oncommand="gApplicationsPane.filter();"/>
-    </hbox>
-
-    <separator class="thin"/>
-
-    <richlistbox id="handlersView" orient="vertical" persist="lastSelectedType"
-                 onselect="gApplicationsPane.onSelectionChanged();">
-      <listheader equalsize="always" style="border: 0; padding: 0; -moz-appearance: none;">
-        <treecol id="typeColumn" label="&typeColumn.label;" value="type"
-                 accesskey="&typeColumn.accesskey;" persist="sortDirection"
-                 flex="1" onclick="gApplicationsPane.sort(event);"
-                 sortDirection="ascending"/>
-        <treecol id="actionColumn" label="&actionColumn2.label;" value="action"
-                 accesskey="&actionColumn2.accesskey;" persist="sortDirection"
-                 flex="1" onclick="gApplicationsPane.sort(event);"/>
-      </listheader>
-    </richlistbox>
-  </prefpane>
-</overlay>
deleted file mode 100644
--- a/im/content/preferences/colors.xul
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-#ifdef XP_MACOSX
-<?xml-stylesheet href="chrome://instantbird/skin/preferences/preferences.css"?>
-#endif
-
-<!DOCTYPE prefwindow SYSTEM "chrome://instantbird/locale/preferences/colors.dtd" >
-
-<prefwindow id="ColorsDialog" type="child"
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-            title="&colorsDialog.title;"
-            dlgbuttons="accept,cancel"
-#ifdef XP_MACOSX
-            style="width: &window.macWidth; !important;">
-#else
-            style="width: &window.width; !important;">
-#endif
-
-  <prefpane id="ColorsDialogPane">
-  
-    <preferences>
-      <preference id="browser.anchor_color"                 name="browser.anchor_color"                 type="string"/>
-      <preference id="browser.underline_anchors"            name="browser.underline_anchors"            type="bool"/>
-      <preference id="browser.display.foreground_color"     name="browser.display.foreground_color"     type="string"/>
-      <preference id="browser.display.background_color"     name="browser.display.background_color"     type="string"/>
-      <preference id="browser.display.use_system_colors"    name="browser.display.use_system_colors"    type="bool"/>
-    </preferences>
-    
-    <hbox>
-      <groupbox flex="1">
-        <caption label="&color;"/>
-        <hbox align="center">
-          <label value="&textColor.label;" accesskey="&textColor.accesskey;" control="foregroundtextmenu"/>
-          <spacer flex="1"/>
-          <colorpicker type="button" id="foregroundtextmenu" palettename="standard"
-                       preference="browser.display.foreground_color"/>
-        </hbox>
-        <hbox align="center" style="margin-top: 5px">
-          <label value="&backgroundColor.label;" accesskey="&backgroundColor.accesskey;" control="backgroundmenu"/>
-          <spacer flex="1"/>
-          <colorpicker type="button" id="backgroundmenu" palettename="standard"
-                       preference="browser.display.background_color"/>
-        </hbox>
-        <separator class="thin"/>
-        <hbox align="center">
-          <checkbox id="browserUseSystemColors" label="&useSystemColors.label;" accesskey="&useSystemColors.accesskey;"
-                    preference="browser.display.use_system_colors"/>
-        </hbox>
-      </groupbox>
-        
-      <groupbox flex="1">
-        <caption label="&links;"/>
-        <hbox align="center">
-          <label value="&linkColor.label;" accesskey="&linkColor.accesskey;" control="unvisitedlinkmenu"/>
-          <spacer flex="1"/>
-          <colorpicker type="button" id="unvisitedlinkmenu" palettename="standard"
-                       preference="browser.anchor_color"/>
-        </hbox>
-        <separator class="thin"/>
-        <hbox align="center">
-          <checkbox id="browserUnderlineAnchors" label="&underlineLinks.label;" accesskey="&underlineLinks.accesskey;"
-                    preference="browser.underline_anchors"/>
-        </hbox>
-      </groupbox>
-    </hbox>
-  </prefpane>
-</prefwindow>
deleted file mode 100644
--- a/im/content/preferences/connection.js
+++ /dev/null
@@ -1,213 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var gConnectionsDialog = {
-  beforeAccept: function ()
-  {
-    var proxyTypePref = document.getElementById("network.proxy.type");
-    if (proxyTypePref.value == 2) {
-      this.doAutoconfigURLFixup();
-      return true;
-    }
-
-    if (proxyTypePref.value != 1)
-      return true;
-
-    var httpProxyURLPref = document.getElementById("network.proxy.http");
-    var httpProxyPortPref = document.getElementById("network.proxy.http_port");
-    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
-
-    // If the port is 0 and the proxy server is specified, focus on the port and cancel submission.
-    for (let prefName of ["http","ssl","ftp","socks"]) {
-      let proxyPortPref = document.getElementById("network.proxy." + prefName + "_port");
-      let proxyPref = document.getElementById("network.proxy." + prefName);
-      // Only worry about ports which are currently active. If the share option is on, then ignore
-      // all ports except the HTTP port
-      if (proxyPref.value != "" && proxyPortPref.value == 0 &&
-            (prefName == "http" || !shareProxiesPref.value)) {
-        document.getElementById("networkProxy" + prefName.toUpperCase() + "_Port").focus();
-        return false;
-      }
-    }
-
-    // In the case of a shared proxy preference, backup the current values and update with the HTTP value
-    if (shareProxiesPref.value) {
-      var proxyPrefs = ["ssl", "ftp", "socks"];
-      for (var i = 0; i < proxyPrefs.length; ++i) {
-        var proxyServerURLPref = document.getElementById("network.proxy." + proxyPrefs[i]);
-        var proxyPortPref = document.getElementById("network.proxy." + proxyPrefs[i] + "_port");
-        var backupServerURLPref = document.getElementById("network.proxy.backup." + proxyPrefs[i]);
-        var backupPortPref = document.getElementById("network.proxy.backup." + proxyPrefs[i] + "_port");
-        backupServerURLPref.value = backupServerURLPref.value || proxyServerURLPref.value;
-        backupPortPref.value = backupPortPref.value || proxyPortPref.value;
-        proxyServerURLPref.value = httpProxyURLPref.value;
-        proxyPortPref.value = httpProxyPortPref.value;
-      }
-    }
-    
-    this.sanitizeNoProxiesPref();
-    
-    return true;
-  },
-
-  checkForSystemProxy: function ()
-  {
-    if ("@mozilla.org/system-proxy-settings;1" in Cc)
-      document.getElementById("systemPref").removeAttribute("hidden");
-  },
-  
-  proxyTypeChanged: function ()
-  {
-    var proxyTypePref = document.getElementById("network.proxy.type");
-
-    // Update http
-    var httpProxyURLPref = document.getElementById("network.proxy.http");
-    httpProxyURLPref.disabled = proxyTypePref.value != 1;
-    var httpProxyPortPref = document.getElementById("network.proxy.http_port");
-    httpProxyPortPref.disabled = proxyTypePref.value != 1;
-
-    // Now update the other protocols
-    this.updateProtocolPrefs();
-
-    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
-    shareProxiesPref.disabled = proxyTypePref.value != 1;
-    var autologinProxyPref = document.getElementById("signon.autologin.proxy");
-    autologinProxyPref.disabled = proxyTypePref.value == 0;
-    var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
-    noProxiesPref.disabled = proxyTypePref.value != 1;
-
-    var autoconfigURLPref = document.getElementById("network.proxy.autoconfig_url");
-    autoconfigURLPref.disabled = proxyTypePref.value != 2;
-
-    this.updateReloadButton();
-  },
-  
-  updateDNSPref: function ()
-  {
-    var socksVersionPref = document.getElementById("network.proxy.socks_version");
-    var socksDNSPref = document.getElementById("network.proxy.socks_remote_dns");
-    var proxyTypePref = document.getElementById("network.proxy.type");
-    var isDefinitelySocks4 = !socksVersionPref.disabled && socksVersionPref.value == 4;
-    socksDNSPref.disabled = (isDefinitelySocks4 || proxyTypePref.value == 0);
-    return undefined;
-  },
-  
-  updateReloadButton: function ()
-  {
-    // Disable the "Reload PAC" button if the selected proxy type is not PAC or
-    // if the current value of the PAC textbox does not match the value stored
-    // in prefs.  Likewise, disable the reload button if PAC is not configured
-    // in prefs.
-
-    var typedURL = document.getElementById("networkProxyAutoconfigURL").value;
-    var proxyTypeCur = document.getElementById("network.proxy.type").value;
-
-    var prefs =
-        Cc["@mozilla.org/preferences-service;1"].
-        getService(Ci.nsIPrefBranch);
-    var pacURL = prefs.getCharPref("network.proxy.autoconfig_url");
-    var proxyType = prefs.getIntPref("network.proxy.type");
-
-    var disableReloadPref =
-        document.getElementById("pref.advanced.proxies.disable_button.reload");
-    disableReloadPref.disabled =
-        (proxyTypeCur != 2 || proxyType != 2 || typedURL != pacURL);
-  },
-  
-  readProxyType: function ()
-  {
-    this.proxyTypeChanged();
-    return undefined;
-  },
-  
-  updateProtocolPrefs: function ()
-  {
-    var proxyTypePref = document.getElementById("network.proxy.type");
-    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
-    var proxyPrefs = ["ssl", "ftp", "socks"];
-    for (var i = 0; i < proxyPrefs.length; ++i) {
-      var proxyServerURLPref = document.getElementById("network.proxy." + proxyPrefs[i]);
-      var proxyPortPref = document.getElementById("network.proxy." + proxyPrefs[i] + "_port");
-      
-      // Restore previous per-proxy custom settings, if present. 
-      if (!shareProxiesPref.value) {
-        var backupServerURLPref = document.getElementById("network.proxy.backup." + proxyPrefs[i]);
-        var backupPortPref = document.getElementById("network.proxy.backup." + proxyPrefs[i] + "_port");
-        if (backupServerURLPref.hasUserValue) {
-          proxyServerURLPref.value = backupServerURLPref.value;
-          backupServerURLPref.reset();
-        }
-        if (backupPortPref.hasUserValue) {
-          proxyPortPref.value = backupPortPref.value;
-          backupPortPref.reset();
-        }
-      }
-
-      proxyServerURLPref.updateElements();
-      proxyPortPref.updateElements();
-      proxyServerURLPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
-      proxyPortPref.disabled = proxyServerURLPref.disabled;
-    }
-    var socksVersionPref = document.getElementById("network.proxy.socks_version");
-    socksVersionPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
-    this.updateDNSPref();
-    return undefined;
-  },
-  
-  readProxyProtocolPref: function (aProtocol, aIsPort)
-  {
-    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
-    if (shareProxiesPref.value) {
-      var pref = document.getElementById("network.proxy.http" + (aIsPort ? "_port" : ""));    
-      return pref.value;
-    }
-    
-    var backupPref = document.getElementById("network.proxy.backup." + aProtocol + (aIsPort ? "_port" : ""));
-    return backupPref.hasUserValue ? backupPref.value : undefined;
-  },
-
-  reloadPAC: function ()
-  {
-    Cc["@mozilla.org/network/protocol-proxy-service;1"].
-        getService().reloadPAC();
-  },
-  
-  doAutoconfigURLFixup: function ()
-  {
-    var autoURL = document.getElementById("networkProxyAutoconfigURL");
-    var autoURLPref = document.getElementById("network.proxy.autoconfig_url");
-    var URIFixup = Cc["@mozilla.org/docshell/urifixup;1"]
-                     .getService(Ci.nsIURIFixup);
-    try {
-      autoURLPref.value = autoURL.value = URIFixup.createFixupURI(autoURL.value, 0).spec;
-    } catch(ex) {}
-  },
-
-  sanitizeNoProxiesPref: function()
-  {
-    var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
-    // replace substrings of ; and \n with commas if they're neither immediately
-    // preceded nor followed by a valid separator character
-    noProxiesPref.value = noProxiesPref.value.replace(/([^, \n;])[;\n]+(?![,\n;])/g, '$1,');
-    // replace any remaining ; and \n since some may follow commas, etc. 
-    noProxiesPref.value = noProxiesPref.value.replace(/[;\n]/g, '');
-  },
-  
-  readHTTPProxyServer: function ()
-  {
-    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
-    if (shareProxiesPref.value)
-      this.updateProtocolPrefs();
-    return undefined;
-  },
-  
-  readHTTPProxyPort: function ()
-  {
-    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
-    if (shareProxiesPref.value)
-      this.updateProtocolPrefs();
-    return undefined;
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/connection.xul
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<!DOCTYPE prefwindow SYSTEM "chrome://instantbird/locale/preferences/connection.dtd">
-
-<?xml-stylesheet href="chrome://global/skin/"?>
-
-<prefwindow id="ConnectionsDialog" type="child"
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-            title="&connectionsDialog.title;"
-            dlgbuttons="accept,cancel,help"
-            onbeforeaccept="return gConnectionsDialog.beforeAccept();"
-            onload="gConnectionsDialog.checkForSystemProxy();"
-#ifdef XP_MACOSX
-            style="width: &window.macWidth; !important;">
-#else
-            style="width: &window.width; !important;">
-#endif
-
-  <prefpane id="ConnectionsDialogPane"
-            helpTopic="prefs-connection-settings">
-
-    <preferences>
-      <preference id="network.proxy.type"         name="network.proxy.type"         type="int" onchange="gConnectionsDialog.proxyTypeChanged();"/>
-      <preference id="network.proxy.http"         name="network.proxy.http"         type="string"/>
-      <preference id="network.proxy.http_port"    name="network.proxy.http_port"    type="int"/>
-      <preference id="network.proxy.ftp"          name="network.proxy.ftp"          type="string"/>
-      <preference id="network.proxy.ftp_port"     name="network.proxy.ftp_port"     type="int"/>
-      <preference id="network.proxy.ssl"          name="network.proxy.ssl"          type="string"/>
-      <preference id="network.proxy.ssl_port"     name="network.proxy.ssl_port"     type="int"/>
-      <preference id="network.proxy.socks"        name="network.proxy.socks"        type="string"/>
-      <preference id="network.proxy.socks_port"   name="network.proxy.socks_port"   type="int"/>
-      <preference id="network.proxy.socks_version"  name="network.proxy.socks_version"  type="int" onchange="gConnectionsDialog.updateDNSPref();"/>
-      <preference id="network.proxy.socks_remote_dns"  name="network.proxy.socks_remote_dns"  type="bool"/>
-      <preference id="network.proxy.no_proxies_on"  name="network.proxy.no_proxies_on"  type="string"/>
-      <preference id="network.proxy.autoconfig_url" name="network.proxy.autoconfig_url" type="string"/>
-      <preference id="network.proxy.share_proxy_settings"
-                  name="network.proxy.share_proxy_settings"
-                  type="bool"/>
-      <preference id="signon.autologin.proxy"
-                  name="signon.autologin.proxy"
-                  type="bool"/>
-
-      <preference id="pref.advanced.proxies.disable_button.reload"
-                  name="pref.advanced.proxies.disable_button.reload"
-                  type="bool"/>
-
-      <preference id="network.proxy.backup.ftp"          name="network.proxy.backup.ftp"          type="string"/>
-      <preference id="network.proxy.backup.ftp_port"     name="network.proxy.backup.ftp_port"     type="int"/>
-      <preference id="network.proxy.backup.ssl"          name="network.proxy.backup.ssl"          type="string"/>
-      <preference id="network.proxy.backup.ssl_port"     name="network.proxy.backup.ssl_port"     type="int"/>
-      <preference id="network.proxy.backup.socks"        name="network.proxy.backup.socks"        type="string"/>
-      <preference id="network.proxy.backup.socks_port"   name="network.proxy.backup.socks_port"   type="int"/>
-    </preferences>
-    
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/connection.js"/>
-
-    <stringbundle id="preferencesBundle" src="chrome://instantbird/locale/preferences/preferences.properties"/>
-
-    <groupbox>
-      <caption label="&proxyTitle.label;"/>
-
-      <radiogroup id="networkProxyType" preference="network.proxy.type"
-                  onsyncfrompreference="return gConnectionsDialog.readProxyType();">
-        <radio value="0" label="&noProxyTypeRadio.label;" accesskey="&noProxyTypeRadio.accesskey;"/>
-        <radio value="4" label="&WPADTypeRadio.label;" accesskey="&WPADTypeRadio.accesskey;"/>
-        <radio value="5" label="&systemTypeRadio.label;" accesskey="&systemTypeRadio.accesskey;" id="systemPref" hidden="true"/>
-        <radio value="1" label="&manualTypeRadio.label;" accesskey="&manualTypeRadio.accesskey;"/>
-        <grid class="indent" flex="1">
-          <columns>
-            <column/>
-            <column flex="1"/>
-          </columns>
-          <rows>
-            <row align="center">
-              <hbox pack="end">
-                <label value="&http.label;" accesskey="&http.accesskey;" control="networkProxyHTTP"/>
-              </hbox>
-              <hbox align="center">
-                <textbox id="networkProxyHTTP" flex="1"
-                         preference="network.proxy.http" onsyncfrompreference="return gConnectionsDialog.readHTTPProxyServer();"/>
-                <label value="&port.label;" accesskey="&HTTPport.accesskey;" control="networkProxyHTTP_Port"/>
-                <textbox id="networkProxyHTTP_Port" type="number" max="65535" size="5"
-                         preference="network.proxy.http_port" onsyncfrompreference="return gConnectionsDialog.readHTTPProxyPort();"/>
-              </hbox>
-            </row>
-            <row>
-              <hbox/>
-              <hbox>
-                <checkbox id="shareAllProxies" label="&shareproxy.label;" accesskey="&shareproxy.accesskey;"
-                          preference="network.proxy.share_proxy_settings"
-                          onsyncfrompreference="return gConnectionsDialog.updateProtocolPrefs();"/>
-              </hbox>
-            </row>
-            <row align="center">
-              <hbox pack="end">
-                <label value="&ssl.label;" accesskey="&ssl.accesskey;" control="networkProxySSL"/>
-              </hbox>
-              <hbox align="center">
-                <textbox id="networkProxySSL" flex="1" preference="network.proxy.ssl"
-                         onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ssl', false);"/>
-                <label value="&port.label;" accesskey="&SSLport.accesskey;" control="networkProxySSL_Port"/>
-                <textbox id="networkProxySSL_Port" type="number" max="65535" size="5" preference="network.proxy.ssl_port"
-                         onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ssl', true);"/>
-              </hbox>
-            </row>
-            <row align="center">
-              <hbox pack="end">
-                <label value="&ftp.label;" accesskey="&ftp.accesskey;" control="networkProxyFTP"/>
-              </hbox>
-              <hbox align="center">
-                <textbox id="networkProxyFTP" flex="1" preference="network.proxy.ftp"
-                         onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', false);"/>
-                <label value="&port.label;" accesskey="&FTPport.accesskey;" control="networkProxyFTP_Port"/>
-                <textbox id="networkProxyFTP_Port" type="number" max="65535" size="5" preference="network.proxy.ftp_port"
-                         onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', true);"/>
-              </hbox>
-            </row>
-            <row align="center">
-              <hbox pack="end">
-                <label value="&socks.label;" accesskey="&socks.accesskey;" control="networkProxySOCKS"/>
-              </hbox>
-              <hbox align="center">
-                <textbox id="networkProxySOCKS" flex="1" preference="network.proxy.socks"
-                         onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', false);"/>
-                <label value="&port.label;" accesskey="&SOCKSport.accesskey;" control="networkProxySOCKS_Port"/>
-                <textbox id="networkProxySOCKS_Port" type="number" max="65535" size="5" preference="network.proxy.socks_port"
-                         onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', true);"/>
-              </hbox>
-            </row>
-            <row>
-              <spacer/>
-              <box pack="start">
-              <radiogroup id="networkProxySOCKSVersion" orient="horizontal"
-                          preference="network.proxy.socks_version">
-                <radio id="networkProxySOCKSVersion4" value="4" label="&socks4.label;" accesskey="&socks4.accesskey;" />
-                <radio id="networkProxySOCKSVersion5" value="5" label="&socks5.label;" accesskey="&socks5.accesskey;" />
-              </radiogroup>
-              <checkbox id="networkProxySOCKSRemoteDNS"  preference="network.proxy.socks_remote_dns" label="&socksRemoteDNS.label;" accesskey="&socksRemoteDNS.accesskey;" />
-              </box>
-            </row>
-            <label value="&noproxy.label;" accesskey="&noproxy.accesskey;" control="networkProxyNone"/>
-            <textbox id="networkProxyNone" preference="network.proxy.no_proxies_on" multiline="true" rows="2"/>
-            <label value="&noproxyExplain.label;" control="networkProxyNone"/>
-          </rows>
-        </grid>
-        <radio value="2" label="&autoTypeRadio.label;" accesskey="&autoTypeRadio.accesskey;"/>
-        <hbox class="indent" flex="1" align="center">
-          <textbox id="networkProxyAutoconfigURL" flex="1" preference="network.proxy.autoconfig_url"
-                   oninput="gConnectionsDialog.updateReloadButton();"/>
-          <button id="autoReload" icon="refresh"
-                  label="&reload.label;" accesskey="&reload.accesskey;"
-                  oncommand="gConnectionsDialog.reloadPAC();" 
-                  preference="pref.advanced.proxies.disable_button.reload"/>
-        </hbox>
-      </radiogroup>
-    </groupbox>
-    <separator class="thin"/>
-    <checkbox id="autologinProxy"
-              label="&autologinproxy.label;"
-              accesskey="&autologinproxy.accesskey;"
-              preference="signon.autologin.proxy"
-              tooltiptext="&autologinproxy.tooltip;"/>
-    <separator/>
-  </prefpane>
-</prefwindow>
-
deleted file mode 100644
--- a/im/content/preferences/content.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var gContentPane = {
-
-  /**
-   * Initializes the fonts dropdowns displayed in this pane.
-   */
-  init: function ()
-  {
-    this._rebuildFonts();
-    var menulist = document.getElementById("defaultFont");
-    if (menulist.selectedIndex == -1) {
-      menulist.insertItemAt(0, "", "", "");
-      menulist.selectedIndex = 0;
-    }
-  },
-
-  /**
-   * Populates the default font list in UI.
-   */
-  _rebuildFonts: function ()
-  {
-    var langGroupPref = document.getElementById("font.language.group");
-    this._selectDefaultLanguageGroup(langGroupPref.value,
-                                     this._readDefaultFontTypeForLanguage(langGroupPref.value) == "serif");
-  },
-
-  /**
-   * 
-   */
-  _selectDefaultLanguageGroup: function (aLanguageGroup, aIsSerif)
-  {
-    const kFontNameFmtSerif         = "font.name.serif.%LANG%";
-    const kFontNameFmtSansSerif     = "font.name.sans-serif.%LANG%";
-    const kFontNameListFmtSerif     = "font.name-list.serif.%LANG%";
-    const kFontNameListFmtSansSerif = "font.name-list.sans-serif.%LANG%";
-    const kFontSizeFmtVariable      = "font.size.variable.%LANG%";
-
-    var prefs = [{ format   : aIsSerif ? kFontNameFmtSerif : kFontNameFmtSansSerif,
-                   type     : "fontname",
-                   element  : "defaultFont",
-                   fonttype : aIsSerif ? "serif" : "sans-serif" },
-                 { format   : aIsSerif ? kFontNameListFmtSerif : kFontNameListFmtSansSerif,
-                   type     : "unichar",
-                   element  : null,
-                   fonttype : aIsSerif ? "serif" : "sans-serif" },
-                 { format   : kFontSizeFmtVariable,
-                   type     : "int",
-                   element  : "defaultFontSize",
-                   fonttype : null }];
-    var preferences = document.getElementById("contentPreferences");
-    for (var i = 0; i < prefs.length; ++i) {
-      var preference = document.getElementById(prefs[i].format.replace(/%LANG%/, aLanguageGroup));
-      if (!preference) {
-        preference = document.createElement("preference");
-        var name = prefs[i].format.replace(/%LANG%/, aLanguageGroup);
-        preference.id = name;
-        preference.setAttribute("name", name);
-        preference.setAttribute("type", prefs[i].type);
-        preferences.appendChild(preference);
-      }
-
-      if (!prefs[i].element)
-        continue;
-
-      var element = document.getElementById(prefs[i].element);
-      if (element) {
-        element.setAttribute("preference", preference.id);
-
-        if (prefs[i].fonttype)
-          FontBuilder.buildFontList(aLanguageGroup, prefs[i].fonttype, element);
-
-        preference.setElementValue(element);
-      }
-    }
-  },
-
-  /**
-   * Returns the type of the current default font for the language denoted by
-   * aLanguageGroup.
-   */
-  _readDefaultFontTypeForLanguage: function (aLanguageGroup)
-  {
-    const kDefaultFontType = "font.default.%LANG%";
-    var defaultFontTypePref = kDefaultFontType.replace(/%LANG%/, aLanguageGroup);
-    var preference = document.getElementById(defaultFontTypePref);
-    if (!preference) {
-      preference = document.createElement("preference");
-      preference.id = defaultFontTypePref;
-      preference.setAttribute("name", defaultFontTypePref);
-      preference.setAttribute("type", "string");
-      preference.setAttribute("onchange", "gContentPane._rebuildFonts();");
-      document.getElementById("contentPreferences").appendChild(preference);
-    }
-    return preference.value;
-  },
-
-  /**
-   * Displays the colors dialog, where default web page/link/etc. colors can be
-   * configured.
-   */
-  configureColors: function ()
-  {
-    document.documentElement.openSubDialog("chrome://instantbird/content/preferences/colors.xul",
-                                           "", null);  
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/content.xul
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % contentDTD SYSTEM "chrome://instantbird/locale/preferences/content.dtd">
-  %brandDTD;
-  %contentDTD;
-]>
-
-<overlay id="ContentPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneContent" 
-            onpaneload="gContentPane.init();">
-
-    <preferences id="contentPreferences">
-      <!--XXX buttons prefs -->
-      <preference id="browser.display.foreground_color"     name="browser.display.foreground_color"     type="string"/>
-      <preference id="messenger.options.filterMode"         name="messenger.options.filterMode"         type="int"/>
-      <preference id="messenger.conversations.sendFormat"   name="messenger.conversations.sendFormat"   type="bool"/>
-      <preference id="font.language.group"                  name="font.language.group"                  type="wstring"
-                  onchange="gContentPane._rebuildFonts();"/>
-    </preferences>
-    
-    <script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/>
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/content.js"/>
-
-    <!-- Formattings -->
-    <groupbox id="formattingsGroup">
-      <caption label="&formattings.label;"/>
-
-      <label control="filterLevel" accesskey="&filterLevel.accesskey;">&filterLevel.label;</label>
-      <menulist id="filterLevel" preference="messenger.options.filterMode">
-        <menupopup>
-          <menuitem value="2" label="&filterLevelAll;"/>
-          <menuitem value="1" label="&filterLevelBasic;"/>
-          <menuitem value="0" label="&filterLevelNone;"/>
-        </menupopup>
-      </menulist>
-    </groupbox>
-
-    <!-- Fonts and Colors -->
-    <groupbox id="fontsGroup">
-      <caption label="&fontsAndColors.label;"/>
-      <hbox align="center">
-        <label control="defaultFont" accesskey="&defaultFont.accesskey;">&defaultFont.label;</label>
-        <menulist id="defaultFont" flex="1"/>
-        <label control="defaultFontSize" accesskey="&defaultSize.accesskey;">&defaultSize.label;</label>
-        <menulist id="defaultFontSize">
-          <menupopup>
-            <menuitem value="9" label="9"/>
-            <menuitem value="10" label="10"/>
-            <menuitem value="11" label="11"/>
-            <menuitem value="12" label="12"/>
-            <menuitem value="13" label="13"/>
-            <menuitem value="14" label="14"/>
-            <menuitem value="15" label="15"/>
-            <menuitem value="16" label="16"/>
-            <menuitem value="17" label="17"/>
-            <menuitem value="18" label="18"/>
-            <menuitem value="20" label="20"/>
-            <menuitem value="22" label="22"/>
-            <menuitem value="24" label="24"/>
-            <menuitem value="26" label="26"/>
-            <menuitem value="28" label="28"/>
-            <menuitem value="30" label="30"/>
-            <menuitem value="32" label="32"/>
-            <menuitem value="34" label="34"/>
-            <menuitem value="36" label="36"/>
-            <menuitem value="40" label="40"/>
-            <menuitem value="44" label="44"/>
-            <menuitem value="48" label="48"/>
-            <menuitem value="56" label="56"/>
-            <menuitem value="64" label="64"/>
-            <menuitem value="72" label="72"/>
-          </menupopup>
-        </menulist>
-      </hbox>
-      <hbox align="center">
-        <label control="defaultColor" accesskey="&defaultColor.accesskey;">&defaultColor.label;</label>
-        <colorpicker type="button" id="defaultColor" palettename="standard"
-                     preference="browser.display.foreground_color"/>
-        <spacer flex="1"/>
-        <button id="colors" icon="select-color"
-                label="&advancedColors.label;"
-                accesskey="&advancedColors.accesskey;"
-                oncommand="gContentPane.configureColors();"/>
-      </hbox>
-      <checkbox id="formatOutgoingMessages" label="&formatOutgoingMessages.label;"
-                accesskey="&formatOutgoingMessages.accesskey;"
-                preference="messenger.conversations.sendFormat"/>
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/im/content/preferences/handlers.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-richlistitem {
-  -moz-binding: url("chrome://instantbird/content/preferences/handlers.xml#handler");
-}
-
-richlistitem[selected="true"] {
-  -moz-binding: url("chrome://instantbird/content/preferences/handlers.xml#handler-selected");
-}
-
-/**
- * Make the icons appear.
- * Note: we display the icon box for every item whether or not it has an icon
- * so the labels of all the items align vertically.
- */
-.actionsMenu > menupopup > menuitem > .menu-iconic-left {
-  display: -moz-box;
-  min-width: 16px;
-}
-
-listitem.offlineapp {
-  -moz-binding: url("chrome://instantbird/content/preferences/handlers.xml#offlineapp");
-}
deleted file mode 100644
--- a/im/content/preferences/handlers.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % applicationsDTD SYSTEM "chrome://instantbird/locale/preferences/applications.dtd">
-  %brandDTD;
-  %applicationsDTD;
-]>
-
-<bindings id="handlerBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="handler-base" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <implementation>
-      <property name="type" readonly="true">
-        <getter>
-          return this.getAttribute("type");
-        </getter>
-      </property>
-    </implementation>
-  </binding>
-
-  <binding id="handler" extends="chrome://instantbird/content/preferences/handlers.xml#handler-base">
-    <content>
-      <xul:hbox flex="1" equalsize="always">
-        <xul:hbox flex="1" align="center" xbl:inherits="tooltiptext=typeDescription">
-          <xul:image src="moz-icon://goat?size=16" class="typeIcon"
-                     xbl:inherits="src=typeIcon" height="16" width="16"/>
-          <xul:label flex="1" crop="end" xbl:inherits="value=typeDescription"/>
-        </xul:hbox>
-        <xul:hbox flex="1" align="center" xbl:inherits="tooltiptext=actionDescription">
-          <xul:image xbl:inherits="src=actionIcon" height="16" width="16" class="actionIcon"/>
-          <xul:label flex="1" crop="end" xbl:inherits="value=actionDescription"/>
-        </xul:hbox>
-      </xul:hbox>
-    </content>
-  </binding>
-
-  <binding id="handler-selected" extends="chrome://instantbird/content/preferences/handlers.xml#handler-base">
-    <content>
-      <xul:hbox flex="1" equalsize="always">
-        <xul:hbox flex="1" align="center" xbl:inherits="tooltiptext=typeDescription">
-          <xul:image src="moz-icon://goat?size=16" class="typeIcon"
-                     xbl:inherits="src=typeIcon" height="16" width="16"/>
-          <xul:label flex="1" crop="end" xbl:inherits="value=typeDescription"/>
-        </xul:hbox>
-        <xul:hbox flex="1">
-          <xul:menulist class="actionsMenu" flex="1" crop="end" selectedIndex="1"
-                        xbl:inherits="tooltiptext=actionDescription"
-                        oncommand="gApplicationsPane.onSelectAction(event.originalTarget)">
-            <xul:menupopup/>
-          </xul:menulist>
-        </xul:hbox>
-      </xul:hbox>
-    </content>
-
-    <implementation>
-      <constructor>
-        gApplicationsPane.rebuildActionsMenu();
-      </constructor>
-    </implementation>
-
-  </binding>
-
-  <binding id="offlineapp"
-	   extends="chrome://global/content/bindings/listbox.xml#listitem">
-    <content>
-      <children>
-	<xul:listcell xbl:inherits="label=host"/>
-	<xul:listcell xbl:inherits="label=usage"/>
-      </children>
-    </content>
-  </binding>
-
-</bindings>
deleted file mode 100644
--- a/im/content/preferences/main.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-if (!("Core" in window))
-  ChromeUtils.import("resource:///modules/ibCore.jsm");
-
-var gMainPane = {
-  _pane: null,
-
-  /**
-   * Initialization of this.
-   */
-  init: function ()
-  {
-    this._pane = document.getElementById("paneMain");
-  },
-
-  /**
-   * Displays the Add-ons Manager.
-   */
-  showAccountsMgr: function ()
-  {
-    Core.showAccounts();
-  },
-
-  /**
-   * Displays the Add-ons Manager.
-   */
-  showAddonsMgr: function ()
-  {
-    Core.showAddons();
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/main.xul
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<!DOCTYPE overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % mainDTD SYSTEM "chrome://instantbird/locale/preferences/main.dtd">
-  %brandDTD;
-  %mainDTD;
-]>
-
-<overlay id="MainPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneMain" onpaneload="gMainPane.init();">
-
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/main.js"/>
-
-    <preferences id="mainPreferences">
-      <preference id="messenger.startup.action"     name="messenger.startup.action"     type="int"/>
-      <preference id="messenger.options.playSounds.blist"   name="messenger.options.playSounds.blist"   type="bool"/>
-      <preference id="messenger.options.playSounds.message" name="messenger.options.playSounds.message" type="bool"/>
-      <preference id="messenger.options.getAttentionOnNewMessages" name="messenger.options.getAttentionOnNewMessages" type="bool"/>
-#ifdef XP_MACOSX
-      <preference id="messenger.options.showUnreadCountInDock" name="messenger.options.showUnreadCountInDock" type="bool"/>
-#else
-      <preference id="extensions.mintrayr.alwaysShowTrayIcon" name="extensions.mintrayr.alwaysShowTrayIcon" type="bool"/>
-      <preference id="extensions.mintrayr.minimizeon" name="extensions.mintrayr.minimizeon" type="int"/>
-#endif
-      <preference id="messenger.options.notifyOfNewMessages" name="messenger.options.notifyOfNewMessages" type="bool"/>
-    </preferences>
-
-    <!-- Startup -->
-    <groupbox id="startupGroup">
-      <caption label="&startup.label;"/>
-
-      <hbox align="center">
-        <label value="&startupAction.label;" accesskey="&startupAction.accesskey;"
-               control="messengerStartupAction"/>
-        <menulist id="messengerStartupAction" preference="messenger.startup.action">
-          <menupopup>
-            <menuitem label="&startupOffline.label;"     value="0"/>
-            <menuitem label="&startupConnectAuto.label;" value="1"/>
-          </menupopup>
-        </menulist>
-      </hbox>
-    </groupbox>
-
-
-    <groupbox id="accountsMgrGroup" orient="horizontal" align="center">
-      <caption label="&accountsMgr.label;"/>
-
-      <description control="manageAccounts"
-#ifdef XP_WIN
-                   flex="1">&manageAccountsDescWin.label;</description>
-#else
-                   flex="1">&manageAccountsDescUnix2.label;</description>
-#endif
-      <button id="manageAccounts" label="&manageAccounts.label;"
-              accesskey="&manageAccounts.accesskey;"
-              oncommand="gMainPane.showAccountsMgr();"/>
-    </groupbox>
-
-    <groupbox id="newMessageGroup">
-      <caption label="&newMessage.label;"/>
-      <checkbox id="getAttention"
-#ifndef XP_MACOSX
-                label="&getAttention.label;"
-                accesskey="&getAttention.accesskey;"
-#else
-                label="&getAttentionMac.label;"
-                accesskey="&getAttentionMac.accesskey;"
-#endif
-                preference="messenger.options.getAttentionOnNewMessages"/>
-#ifdef XP_MACOSX
-      <checkbox id="unreadCountInDock"
-                label="&unreadCountInDock.label;"
-                accesskey="&unreadCountInDock.accesskey;"
-                preference="messenger.options.showUnreadCountInDock"/>
-#endif
-      <checkbox id="notifyOfNewMessages"
-                label="&notifyOfNewMessages.label;"
-                accesskey="&notifyOfNewMessages.accesskey;"
-                preference="messenger.options.notifyOfNewMessages"/>
-    </groupbox>
-
-    <groupbox id="soundsGroup">
-      <caption label="&sounds.label;"/>
-      <checkbox id="playSoundsMessage" label="&playSoundsMessage.label;"
-                accesskey="&playSoundsMessage.accesskey;"
-                preference="messenger.options.playSounds.message"/>
-      <checkbox id="playSoundsBlist" label="&playSoundsBlist.label;"
-                accesskey="&playSoundsBlist.accesskey;"
-                preference="messenger.options.playSounds.blist"/>
-    </groupbox>
-
-#ifndef XP_MACOSX
-    <groupbox id="systrayGroup">
-      <caption label="&systray.label;"/>
-
-      <checkbox label="&alwaysShowTrayIcon.label;"
-                accesskey="&alwaysShowTrayIcon.accesskey;"
-                preference="extensions.mintrayr.alwaysShowTrayIcon"/>
-      <hbox align="center">
-        <label value="&minimizeToTray.label;"
-               accesskey="&minimizeToTray.accesskey;"
-               control="minimizeOn"/>
-        <menulist id="minimizeOn" preference="extensions.mintrayr.minimizeon">
-          <menupopup>
-            <menuitem label="&minimizeOn.never.label;"    value="0"/>
-            <menuitem label="&minimizeOn.minimize.label;" value="1"/>
-            <menuitem label="&minimizeOn.close.label;"    value="2"/>
-            <menuitem label="&minimizeOn.both.label;"     value="3"/>
-          </menupopup>
-        </menulist>
-      </hbox>
-    </groupbox>
-
-#endif
-    <hbox class="bottomBox">
-      <groupbox id="addonsMgrGroup" orient="horizontal" align="center" flex="1">
-        <caption label="&addonsMgr.label;"/>
-
-        <description control="manageAddons"
-#ifdef XP_WIN
-                     flex="1">&manageAddonsDescWin.label;</description>
-#else
-                     flex="1">&manageAddonsDescUnix2.label;</description>
-#endif
-        <button id="manageAddons" label="&manageAddons.label;"
-                accesskey="&manageAddons.accesskey;"
-                oncommand="gMainPane.showAddonsMgr();"/>
-      </groupbox>
-    </hbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/im/content/preferences/messagestyle.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var jsProtoHelper = {};
-ChromeUtils.import("resource:///modules/jsProtoHelper.jsm", jsProtoHelper);
-
-function Conversation(aName) {
-  this._name = aName;
-  this._observers = [];
-  let now = new Date();
-  this._date = new Date(now.getFullYear(), now.getMonth(), now.getDate(),
-                        10, 42, 22) * 1000;
-}
-Conversation.prototype = {
-  __proto__: jsProtoHelper.GenericConvIMPrototype,
-  account: {protocol: {name: "Fake Protocol"},
-            alias: "", name: "Fake Account",
-            statusInfo: Services.core.globalUserStatus}
-};
-
-function Message(aWho, aMessage, aObject) {
-  this._init(aWho, aMessage, aObject);
-}
-Message.prototype = {
-  __proto__: jsProtoHelper.GenericMessagePrototype,
-  get displayMessage() { return this.originalMessage; }
-};
-
-// Message style tooltips use this.
-function getBrowser() { return document.getElementById("previewbrowser"); }
-
-var previewObserver = {
-  _loaded: false,
-  load: function() {
-    gThemePane.buildThemeList("messagestyle");
-
-    let makeDate = function(aDateString) {
-      let array = aDateString.split(":");
-      let now = new Date();
-      return (new Date(now.getFullYear(), now.getMonth(), now.getDate(),
-                       array[0], array[1], array[2])) / 1000;
-    };
-    let bundle = document.getElementById("themesBundle");
-    let msg = {};
-    ["nick1", "buddy1", "nick2", "buddy2",
-     "message1", "message2", "message3"].forEach(function(aText) {
-      msg[aText] = bundle.getString(aText);
-    });
-    let conv = new Conversation(msg.nick2);
-    conv.messages = [
-      new Message(msg.buddy1, msg.message1, {outgoing: true, _alias: msg.nick1, time: makeDate("10:42:22"), _conversation: conv}),
-      new Message(msg.buddy1, msg.message2, {outgoing: true, _alias: msg.nick1, time: makeDate("10:42:25"), _conversation: conv}),
-      new Message(msg.buddy2, msg.message3, {incoming: true, _alias: msg.nick2, time: makeDate("10:43:01"), _conversation: conv})
-    ];
-    previewObserver.conv = conv;
-
-    let themeName = document.getElementById("messagestyle-themename");
-    if (themeName.value && !themeName.selectedItem)
-      themeName.value = themeName.value;
-    previewObserver.browser = document.getElementById("previewbrowser");
-    document.getElementById("showHeaderCheckbox")
-            .addEventListener("CheckboxStateChange",
-                              previewObserver.showHeaderChanged);
-    previewObserver.displayTheme(themeName.value);
-    this._loaded = true;
-  },
-
-  showHeaderChanged: function() {
-    if (!previewObserver._loaded)
-      return;
-
-    previewObserver.theme.showHeader = this.checked;
-    previewObserver.reloadPreview();
-  },
-
-  currentThemeChanged: function() {
-    if (!this._loaded)
-      return;
-
-    let currentTheme = document.getElementById("messagestyle-themename").value;
-    if (!currentTheme)
-      return;
-
-    this.displayTheme(currentTheme);
-  },
-
-  _ignoreVariantChange: false,
-  currentVariantChanged: function() {
-    if (!this._loaded || this._ignoreVariantChange)
-      return;
-
-    let variant = document.getElementById("themevariant").value;
-    if (!variant)
-      return;
-
-    this.theme.variant = variant;
-    this.reloadPreview();
-  },
-
-  displayTheme: function(aTheme) {
-    try {
-      this.theme = getThemeByName(aTheme);
-    }
-    catch(e) {
-      document.getElementById("previewDeck").selectedIndex = 0;
-      return;
-    }
-
-    let menulist = document.getElementById("themevariant");
-    if (menulist.firstChild)
-      menulist.firstChild.remove();
-    let popup = menulist.appendChild(document.createElement("menupopup"));
-    let variants = getThemeVariants(this.theme);
-
-    let defaultVariant = "";
-    if (("DefaultVariant" in this.theme.metadata) &&
-        variants.includes(this.theme.metadata.DefaultVariant))
-      defaultVariant = this.theme.metadata.DefaultVariant.replace(/_/g, " ");
-
-    let defaultText = defaultVariant;
-    if (!defaultText && ("DisplayNameForNoVariant" in this.theme.metadata))
-      defaultText = this.theme.metadata.DisplayNameForNoVariant;
-    // if the name in the metadata is 'Default', use the localized version
-    if (!defaultText || defaultText.toLowerCase() == "default")
-      defaultText = document.getElementById("themesBundle").getString("default");
-
-    let menuitem = document.createElement("menuitem");
-    menuitem.setAttribute("label", defaultText);
-    menuitem.setAttribute("value", "default");
-    popup.appendChild(menuitem);
-    popup.appendChild(document.createElement("menuseparator"));
-
-    variants.sort().forEach(function(aVariantName) {
-      let displayName = aVariantName.replace(/_/g, " ");
-      if (displayName != defaultVariant) {
-        let menuitem = document.createElement("menuitem");
-        menuitem.setAttribute("label", displayName);
-        menuitem.setAttribute("value", aVariantName);
-        popup.appendChild(menuitem);
-      }
-    });
-    this._ignoreVariantChange = true;
-    if (!this._loaded)
-      menulist.value = this.theme.variant = menulist.value;
-    else {
-      menulist.value = this.theme.variant; // (reset to "default")
-      document.getElementById("paneThemes").userChangedValue(menulist);
-    }
-    this._ignoreVariantChange = false;
-
-    // disable the variant menulist if there's no variant, or only one
-    // which is the default
-    menulist.disabled = variants.length == 0 ||
-                        variants.length == 1 && defaultVariant;
-
-    document.getElementById("showHeaderCheckbox").disabled =
-      !this.theme.html.hasOwnProperty("header");
-
-    this.reloadPreview();
-    document.getElementById("previewDeck").selectedIndex = 1;
-  },
-
-  reloadPreview: function() {
-    this.browser.init(this.conv);
-    this.browser._theme = this.theme;
-    Services.obs.addObserver(this, "conversation-loaded");
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    if (aTopic != "conversation-loaded" || aSubject != this.browser)
-      return;
-
-    // We want to avoid the convbrowser trying to scroll to the last
-    // added message, as that causes the entire pref pane to jump up
-    // (bug 1179943). Therefore, we override the method convbrowser
-    // uses to determine if it should scroll, as well as its
-    // mirror in the contentWindow (that messagestyle JS can call).
-    this.browser.autoScrollEnabled = () => false;
-    this.browser.contentWindow.autoScrollEnabled = () => false;
-
-    // Display all queued messages. Use a timeout so that message text
-    // modifiers can be added with observers for this notification.
-    setTimeout(function() {
-      for (let message of previewObserver.conv.messages)
-        aSubject.appendMessage(message, false);
-    }, 0);
-
-    Services.obs.removeObserver(this, "conversation-loaded");
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/preferences.xul
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xml-stylesheet href="chrome://global/skin/global.css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/preferences/preferences.css"?>
-
-<!-- XXX This should be in applications.xul, but bug 393953 means putting it
-   - there causes the Applications pane not to work the first time you open
-   - the Preferences dialog in a browsing session, so we work around the problem
-   - by putting it here instead.
-   -->
-<?xml-stylesheet href="chrome://instantbird/content/preferences/handlers.css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/preferences/applications.css"?>
-<!-- XXX and this should be in themes.xul. Same issue and workaround... -->
-<?xml-stylesheet href="chrome://instantbird/content/instantbird.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/preferences/smiley.css" type="text/css"?>
-
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-#endif
-
-<!DOCTYPE prefwindow [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-<!ENTITY % preferencesDTD SYSTEM "chrome://instantbird/locale/preferences/preferences.dtd">
-%brandDTD;
-%preferencesDTD;
-#ifdef XP_MACOSX
-<!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-%instantbirdDTD;
-#endif
-]>
-
-#ifdef XP_WIN
-#define USE_WIN_TITLE_STYLE
-#endif
-
-<prefwindow type="prefwindow"
-            id="BrowserPreferences"
-            windowtype="Messenger:Preferences"
-#ifdef USE_WIN_TITLE_STYLE
-            title="&prefWindow.titleWin;"
-#else
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-            title="&prefWindow.titleGNOME;"
-#endif
-#endif
-#endif
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-#ifdef USE_WIN_TITLE_STYLE
-            style="&prefWinMinSize.styleWin2;">
-#else
-#ifdef XP_MACOSX
-            style="&prefWinMinSize.styleMac;">
-#else
-            style="&prefWinMinSize.styleGNOME;">
-#endif
-#endif
-
-    <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-
-#ifdef XP_MACOSX
-#include ../menus.xul.inc
-#endif
-
-    <stringbundle id="bundleBrand" src="chrome://branding/locale/brand.properties"/>
-    <stringbundle id="bundlePreferences"
-                  src="chrome://instantbird/locale/preferences/preferences.properties"/>
-
-    <prefpane id="paneMain" label="&paneGeneral.title;"
-              src="chrome://instantbird/content/preferences/main.xul"/>
-    <prefpane id="paneTabs" label="&paneTabs.title;"
-              src="chrome://instantbird/content/preferences/tabs.xul"/>
-    <prefpane id="paneContent" label="&paneContent.title;"
-              src="chrome://instantbird/content/preferences/content.xul"/>
-    <prefpane id="paneApplications" label="&paneApplications.title;"
-              src="chrome://instantbird/content/preferences/applications.xul"/>
-    <prefpane id="panePrivacy" label="&panePrivacy.title;"
-              src="chrome://instantbird/content/preferences/privacy.xul"/>
-    <prefpane id="paneThemes" label="&paneThemes.title;"
-              src="chrome://instantbird/content/preferences/themes.xul"/>
-    <prefpane id="paneAdvanced" label="&paneAdvanced.title;"
-              src="chrome://instantbird/content/preferences/advanced.xul"/>
-
-</prefwindow>
deleted file mode 100644
--- a/im/content/preferences/privacy.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.defineModuleGetter(this, "LoginHelper", "resource://gre/modules/LoginHelper.jsm");
-
-var gPrivacyPane = {
-  init: function ()
-  {
-    this.updateDisabledState();
-    this._initMasterPasswordUI();
-  },
-
-  updateDisabledState: function ()
-  {
-    let broadcaster = document.getElementById("idleReportingEnabled");
-    if (document.getElementById("messenger.status.reportIdle").value) {
-      broadcaster.removeAttribute("disabled");
-      this.updateMessageDisabledState();
-    }
-    else
-      broadcaster.setAttribute("disabled", "true");
-  },
-
-  updateMessageDisabledState: function ()
-  {
-    let textbox = document.getElementById("defaultIdleAwayMessage");
-    if (document.getElementById("messenger.status.awayWhenIdle").value)
-      textbox.removeAttribute("disabled");
-    else
-      textbox.setAttribute("disabled", "true");
-  },
-
-  openLogFolder: function ()
-  {
-    // Log folder is "'profile directory'/logs"
-    var logFolder = Services.dirsvc.get("ProfD", Ci.nsIFile);
-    logFolder.append("logs");
-
-    try {
-      logFolder.reveal();
-    } catch (e) {
-      // Adapted the workaround of Firefox' Download Manager for some *ix systems
-      let parent = logFolder.parent.QueryInterface(Ci.nsIFile);
-      if (!parent)
-       return;
-
-      try {
-       // "Double click" the parent directory to show where the file should be
-       parent.launch();
-      } catch (e) {
-       // If launch also fails (probably because it's not implemented), let the
-       // OS handler try to open the parent
-       let uri = Services.io.newFileURI(parent);
-       let protocolSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"].
-                         getService(Ci.nsIExternalProtocolService);
-       protocolSvc.loadURI(uri);
-      }
-    }
-  },
-
-  /**
-   * Initializes master password UI: the "use master password" checkbox, selects
-   * the master password button to show, and enables/disables it as necessary.
-   * The master password is controlled by various bits of NSS functionality,
-   * so the UI for it can't be controlled by the normal preference bindings.
-   */
-  _initMasterPasswordUI: function ()
-  {
-    var noMP = !LoginHelper.isMasterPasswordSet();
-
-    document.getElementById("changeMasterPassword").disabled = noMP;
-
-    document.getElementById("useMasterPassword").checked = !noMP;
-  },
-
-
-  /**
-   * Enables/disables the master password button depending on the state of the
-   * "use master password" checkbox, and prompts for master password removal
-   * if one is set.
-   */
-  updateMasterPasswordButton: function ()
-  {
-    var checkbox = document.getElementById("useMasterPassword");
-    var button = document.getElementById("changeMasterPassword");
-    button.disabled = !checkbox.checked;
-
-    // unchecking the checkbox should try to immediately remove the master
-    // password, because it's impossible to non-destructively remove the master
-    // password used to encrypt all the passwords without providing it (by
-    // design), and it would be extremely odd to pop up that dialog when the
-    // user closes the prefwindow and saves his settings
-    if (!checkbox.checked)
-      this._removeMasterPassword();
-    else
-      this.changeMasterPassword();
-
-    this._initMasterPasswordUI();
-  },
-
-  /**
-   * Displays the "remove master password" dialog to allow the user to remove
-   * the current master password.  When the dialog is dismissed, master password
-   * UI is automatically updated.
-   */
-  _removeMasterPassword: function ()
-  {
-    var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
-                   getService(Ci.nsIPKCS11ModuleDB);
-    if (secmodDB.isFIPSEnabled) {
-      var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].
-                          getService(Ci.nsIPromptService);
-      var bundle = document.getElementById("bundleMasterPwPreferences");
-      promptService.alert(window,
-                          bundle.getString("pw_change_failed_title"),
-                          bundle.getString("pw_change2empty_in_fips_mode"));
-    }
-    else {
-      document.documentElement.openSubDialog("chrome://mozapps/content/preferences/removemp.xul",
-                                             "", null);
-    }
-    this._initMasterPasswordUI();
-  },
-
-  /**
-   * Displays a dialog in which the master password may be changed.
-   */
-  changeMasterPassword: function ()
-  {
-    document.documentElement.openSubDialog("chrome://mozapps/content/preferences/changemp.xul",
-                                           "", null);
-    this._initMasterPasswordUI();
-  },
-
-  /**
-   * Shows the sites where the user has saved passwords and the associated
-   * login information.
-   */
-  showPasswords: function ()
-  {
-    document.documentElement.openWindow("Toolkit:PasswordManager",
-                                        "chrome://passwordmgr/content/passwordManager.xul",
-                                        "", null);
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/privacy.xul
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-<!ENTITY % privacyDTD SYSTEM "chrome://instantbird/locale/preferences/privacy.dtd">
-%brandDTD;
-%privacyDTD;
-]>
-
-<overlay id="PrivacyPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <prefpane id="panePrivacy" onpaneload="gPrivacyPane.init();">
-
-    <stringbundle id="bundleMasterPwPreferences" src="chrome://mozapps/locale/preferences/preferences.properties"/>
-
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/privacy.js"/>
-
-    <preferences id="privacyPreferences">
-      <preference id="purple.conversations.im.send_typing" name="purple.conversations.im.send_typing" type="bool"/>
-      <preference id="messenger.status.reportIdle"         name="messenger.status.reportIdle"         type="bool"
-                  onchange="gPrivacyPane.updateDisabledState();"/>
-      <preference id="messenger.status.timeBeforeIdle"     name="messenger.status.timeBeforeIdle"     type="int"/>
-      <preference id="messenger.status.awayWhenIdle"       name="messenger.status.awayWhenIdle"       type="bool"
-                  onchange="gPrivacyPane.updateMessageDisabledState();"/>
-      <preference id="messenger.status.defaultIdleAwayMessage" name="messenger.status.defaultIdleAwayMessage" type="wstring"/>
-      <preference id="purple.logging.log_chats"            name="purple.logging.log_chats"            type="bool"/>
-      <preference id="purple.logging.log_ims"              name="purple.logging.log_ims"              type="bool"/>
-      <preference id="purple.logging.log_system"           name="purple.logging.log_system"           type="bool"/>
-      <preference id="pref.privacy.disable_button.view_passwords" name="pref.privacy.disable_button.view_passwords" type="bool"/>
-    </preferences>
-
-    <broadcaster id="idleReportingEnabled"/>
-
-    <!-- Status -->
-    <groupbox id="statusGroup">
-      <caption label="&status.label;"/>
-      <hbox align="center">
-        <checkbox id="reportIdle" label="&reportIdleAfter.label;"
-                  accesskey="&reportIdleAfter.accesskey;"
-                  preference="messenger.status.reportIdle"/>
-        <textbox id="timeBeforeAway" type="number" min="1"
-                 observes="idleReportingEnabled"
-                 preference="messenger.status.timeBeforeIdle"
-                 onsyncfrompreference="var elt = document.getElementById(this.getAttribute('preference'));
-                                       return (elt.instantApply ? elt.valueFromPreferences : elt.value) / 60;"
-                 onsynctopreference="return this.value * 60;"/>
-        <label value="&idleTime;" control="timeBeforeAway"/>
-      </hbox>
-      <vbox class="indent">
-        <checkbox id="autoAway" label="&andSetStatusToAway.label;"
-                  observes="idleReportingEnabled"
-                  accesskey="&andSetStatusToAway.accesskey;"
-                  preference="messenger.status.awayWhenIdle"/>
-        <textbox id="defaultIdleAwayMessage" class="indent"
-                 observes="idleReportingEnabled"
-                 preference="messenger.status.defaultIdleAwayMessage"/>
-      </vbox>
-      <separator/>
-      <checkbox id="sendTyping" label="&sendTyping.label;"
-                accesskey="&sendTyping.accesskey;"
-                preference="purple.conversations.im.send_typing"/>
-    </groupbox>
-
-    <!-- Logs -->
-    <groupbox id="logsGroup">
-      <caption label="&logsGroup.label;"/>
-      <checkbox id="logConversations" label="&logConversations.label;"
-                accesskey="&logConversations.accesskey;"
-                preference="purple.logging.log_ims"
-                onsynctopreference="document.getElementById('purple.logging.log_chats').value = this.checked;"/>
-      <checkbox id="logSystem" label="&logSystem.label;"
-                accesskey="&logSystem.accesskey;"
-                preference="purple.logging.log_system"/>
-      <separator class="thin"/>
-      <hbox align="center">
-        <description control="openLogFolder"
-                     flex="1">&logShowFolder.description;</description>
-        <button id="openLogFolder" label="&logShowFolderButton.label;"
-                accesskey="&logShowFolderButton.accesskey;"
-                oncommand="gPrivacyPane.openLogFolder();"/>
-      </hbox>
-    </groupbox>
-
-    <!-- Passwords -->
-    <groupbox id="passwordsGroup" orient="vertical">
-      <caption label="&passwords.label;"/>
-
-      <description>&savedPasswords.intro;</description>
-      <hbox>
-        <spacer flex="1"/>
-        <button label="&savedPasswords.label;" accesskey="&savedPasswords.accesskey;"
-                oncommand="gPrivacyPane.showPasswords();"
-                preference="pref.privacy.disable_button.view_passwords"/>
-      </hbox>
-
-      <separator class="thin"/>
-
-      <description>&masterPassword.intro;</description>
-      <hbox>
-        <checkbox id="useMasterPassword" flex="1"
-                  label="&useMasterPassword.label;" accesskey="&useMasterPassword.accesskey;"
-                  oncommand="gPrivacyPane.updateMasterPasswordButton();"/>
-
-        <button id="changeMasterPassword"
-                label="&changeMasterPassword.label;" accesskey="&changeMasterPassword.accesskey;"
-                oncommand="gPrivacyPane.changeMasterPassword();"/>
-      </hbox>
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/im/content/preferences/smiley.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-smiley {
-  -moz-binding: url("chrome://instantbird/content/preferences/smiley.xml#smiley");
-}
-
-listheader {
-  border: 0;
-  padding: 0;
-  -moz-appearance: none;
-}
-
-treecol {
-  -moz-binding: url("chrome://instantbird/content/preferences/smiley.xml#treecol");
-}
-
-smiley:nth-child(odd) {
-  background-color: -moz-oddtreerow;
-}
-
-.smileyTextCodes {
-  font-family: monospace;
-}
-
-.smileyImageBox {
-  -moz-box-align: center;
-}
-
-.smileyImage {
-  margin: 1px 1em;
-}
deleted file mode 100644
--- a/im/content/preferences/smiley.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings>
-
-<bindings id="smileyBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="smiley" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content>
-      <xul:hbox flex="1" equalsize="always">
-        <xul:hbox flex="1" class="smileyImageBox">
-          <xul:image class="smileyImage" xbl:inherits="src=smileyImage"/>
-        </xul:hbox>
-        <xul:label flex="1" class="smileyTextCodes" crop="end" xbl:inherits="value=smileyTextCodes"/>
-      </xul:hbox>
-    </content>
-  </binding>
-
-  <!-- chrome://global/content/bindings/tree.xml#treecol simplified so
-   that we don't throw JS errors from the onclick handler -->
-  <binding id="treecol" role="xul:treecolumnitem"
-           extends="chrome://global/content/bindings/tree.xml#tree-base">
-    <content>
-      <xul:label class="treecol-text" xbl:inherits="crop,value=label" flex="1" crop="right"/>
-    </content>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/preferences/smileys.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var smileysPreview = {
-  _loaded: false,
-  load: function() {
-    ChromeUtils.import("resource:///modules/imSmileys.jsm");
-
-    gThemePane.buildThemeList("emoticons");
-    let themeName = document.getElementById("emoticons-themename");
-    // force the setter to execute again now that the menuitem exists
-    themeName.value = themeName.value;
-    this._loaded = true;
-    this.displayCurrentTheme();
-  },
-
-  displayCurrentTheme: function() {
-    if (!this._loaded)
-      return;
-
-    let themeName = document.getElementById("emoticons-themename").value;
-    this.smileyList = getSmileyList(themeName);
-    let list = document.getElementById("smileysPreview");
-    let item = list.firstChild.nextSibling;
-    while (item) {
-      let next = item.nextSibling;
-      item.remove();
-      item = next;
-    }
-
-    if (this.smileyList) {
-      for (let smiley of this.smileyList) {
-        let item = document.createElement("smiley");
-        item.setAttribute("smileyImage", smiley.src);
-        item.setAttribute("smileyTextCodes", smiley.textCodes.join(" "));
-        list.appendChild(item);
-      }
-    }
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/tabs.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var gTabsPane = {
-  init: function ()
-  {
-    this.updateMUCWindowSetting();
-    document.getElementById("warnCloseMultiple").hidden =
-      !document.getElementById("messenger.conversations.alwaysClose").value;
-  },
-
-  updateMUCWindowSetting: function ()
-  {
-    document.getElementById("useSeparateWindowsForMUCs").disabled =
-      !document.getElementById("messenger.conversations.openInTabs").value;
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/tabs.xul
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-<!ENTITY % tabsDTD SYSTEM "chrome://instantbird/locale/preferences/tabs.dtd">
-%tabsDTD;
-]>
-
-<overlay id="TabsPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneTabs" onpaneload="gTabsPane.init();">
-
-    <preferences id="tabsPreferences">
-      <preference id="messenger.conversations.openInTabs"     name="messenger.conversations.openInTabs"     type="bool"
-                  onchange="gTabsPane.updateMUCWindowSetting();"/>
-      <preference id="messenger.conversations.useSeparateWindowsForMUCs" name="messenger.conversations.useSeparateWindowsForMUCs" type="bool"/>
-      <preference id="browser.tabs.autoHide"                  name="browser.tabs.autoHide"                  type="bool" inverted="true"/>
-      <preference id="browser.tabs.warnOnClose"               name="browser.tabs.warnOnClose"               type="bool"/>
-      <preference id="messenger.conversations.alwaysClose"    name="messenger.conversations.alwaysClose"    type="bool"/>
-    </preferences>
-
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/tabs.js"/>
-
-    <!-- XXX flex below is a hack because wrapping checkboxes don't reflow
-             properly; see bug 349098 -->
-    <vbox id="tabPrefsBox" align="start" flex="1">
-      <checkbox id="openInTabs" label="&enableTabbedConversations.label;"
-                accesskey="&enableTabbedConversations.accesskey;"
-                preference="messenger.conversations.openInTabs"/>
-      <checkbox id="useSeparateWindowsForMUCs" class="indent"
-                label="&groupMUCsInSeparateWindow.label;"
-                accesskey="&groupMUCsInSeparateWindow.accesskey;"
-                preference="messenger.conversations.useSeparateWindowsForMUCs"/>
-      <checkbox id="showTabBar" label="&showTabBar.label;"
-                accesskey="&showTabBar.accesskey;"
-                preference="browser.tabs.autoHide"/>
-      <checkbox id="warnCloseMultiple" label="&warnCloseMultipleTabs.label;"
-                accesskey="&warnCloseMultipleTabs.accesskey;"
-                preference="browser.tabs.warnOnClose"/>
-    </vbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/im/content/preferences/themes.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
-
-var PREF_EXTENSIONS_GETMOREMESSAGESTYLESURL = "extensions.getMoreMessageStylesURL";
-var PREF_EXTENSIONS_GETMOREEMOTICONSURL     = "extensions.getMoreEmoticonsURL";
-
-var gThemePane = {
-  init: function (){
-    AddonManager.getAllAddons(function(aAddons) {
-      gThemePane.extensionList = aAddons;
-      previewObserver.load();
-      smileysPreview.load();
-    });
-    gThemePane.setGetMore("Emoticons");
-    gThemePane.setGetMore("MessageStyles");
-  },
-
-  /* Set the correct URL for the "Get more ..."-links */
-  setGetMore: function (aType){
-    var prefURL;
-    switch(aType){
-      case "Emoticons":
-        prefURL = PREF_EXTENSIONS_GETMOREEMOTICONSURL;
-        break;
-      case "MessageStyles":
-        prefURL = PREF_EXTENSIONS_GETMOREMESSAGESTYLESURL;
-        break;
-      default:
-        return;
-    }
-
-    var getMore = document.getElementById("getMore" + aType);
-    var showGetMore = false;
-    const nsIPrefBranch = Ci.nsIPrefBranch;
-    if (Services.prefs.getPrefType(prefURL) != nsIPrefBranch.PREF_INVALID) {
-      try {
-        var getMoreURL = Cc["@mozilla.org/toolkit/URLFormatterService;1"]
-                           .getService(Ci.nsIURLFormatter)
-                           .formatURLPref(prefURL);
-        getMore.setAttribute("getMoreURL", getMoreURL);
-        showGetMore = getMoreURL != "about:blank";
-      }
-      catch (e) { }
-    }
-    getMore.hidden = !showGetMore;
-  },
-
-  /* Create the drop down list for emoticons and messagestyles;
-      this will take care of disabled and incompatible themes and the case
-      that there are no custom styles installed.
-   */
-  buildThemeList: function (aThemeType) {
-    let extensionTypeRegExp = new RegExp("^" + aThemeType + "-");
-    let themeList =
-      this.getExtensionList()
-          .filter(item => extensionTypeRegExp.test(item.id))
-          .sort(function(item1, item2) {
-            let name1 = item1.name.toLowerCase();
-            let name2 = item2.name.toLowerCase();
-            return name1 < name2 ? -1 : name1 > name2 ? 1 : 0;
-          });
-    if (!themeList.length)
-      return;
-
-    document.getElementById("no-" + aThemeType + "-menuitem")
-            .setAttribute("hidden", "true");
-
-    let themeNameRegExp = new RegExp("^" + aThemeType + "-([^@]+)@.*","");
-    let themeBundle = document.getElementById("themesBundle");
-    let menulist = document.getElementById(aThemeType + "-themename");
-    themeList.forEach(function(aItem) {
-      let label = aItem.name;
-      if (aItem.userDisabled) {
-        label += " " + themeBundle.getString("disabled");
-      }
-      else if (!aItem.isCompatible) {
-        label += " " + themeBundle.getString("incompatible");
-      }
-
-      let item =
-        menulist.appendItem(label, aItem.id.replace(themeNameRegExp, "$1"));
-
-      // Set it to deactivated if it is not active;
-      // this is independent from the reason displayed.
-      if (!aItem.isActive || aItem.userDisabled)
-        item.setAttribute("disabled", "true");
-    });
-  },
-
-  openURL: function (aURL) {
-    Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-      .getService(Ci.nsIExternalProtocolService)
-      .loadURI(Services.io.newURI(aURL));
-  },
-
-  // Getting the extension list is slow, return a cached copy of the list
-  getExtensionList: function () {
-    if (!this.extensionList)
-      throw "The add-ons list should be loaded by now...";
-    return this.extensionList;
-  }
-};
deleted file mode 100644
--- a/im/content/preferences/themes.xul
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % themesDTD SYSTEM "chrome://instantbird/locale/preferences/themes.dtd">
-  %themesDTD;
-]>
-
-<overlay id="ThemesPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneThemes"
-            onpaneload="gThemePane.init();"
-            flex="1">
-
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/messagestyle.js"/>
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/smileys.js"/>
-    <script type="application/javascript" src="chrome://instantbird/content/preferences/themes.js"/>
-
-    <preferences id="themesPreferences">
-      <preference id="messenger.options.messagesStyle.theme"      name="messenger.options.messagesStyle.theme"      type="string"/>
-      <preference id="messenger.options.messagesStyle.variant"    name="messenger.options.messagesStyle.variant"    type="string"/>
-      <preference id="messenger.options.messagesStyle.showHeader" name="messenger.options.messagesStyle.showHeader" type="bool"/>
-      <preference id="messenger.options.emoticonsTheme"           name="messenger.options.emoticonsTheme"           type="string"/>
-    </preferences>
-
-    <stringbundleset id="stringbundleset">
-      <stringbundle id="themesBundle"
-                    src="chrome://instantbird/locale/preferences/themes.properties"/>
-    </stringbundleset>
-
-    <tabbox flex="1">
-      <tabs>
-        <tab label="&messageStyleTab.title;"/>
-        <tab label="&emoticonsTab.title;"/>
-        <!--<tab label="Sounds"/>-->
-      </tabs>
-      <tabpanels flex="1">
-        <tabpanel orient="vertical" flex="1">
-          <hbox align="baseline">
-            <label value="&messageStyleTheme.label;" control="themename"
-                   accesskey="&messageStyleTheme.accesskey;"/>
-            <menulist id="messagestyle-themename"
-                      flex="1" crop="end"
-                      preference="messenger.options.messagesStyle.theme"
-                      onselect="previewObserver.currentThemeChanged();">
-              <menupopup id="theme-menupopup">
-                <menuitem id="bubbles-menuitem"
-                          label="&messageStyleBubblesTheme.label;"
-                          value="bubbles"/>
-                <menuitem id="dark-menuitem"
-                          label="&messageStyleDarkTheme.label;"
-                          value="dark"/>
-                <menuitem id="papersheets-menuitem"
-                          label="&messageStylePaperSheetsTheme.label;"
-                          value="papersheets"/>
-                <menuitem id="simple-menuitem"
-                          label="&messageStyleSimpleTheme.label;"
-                          value="simple"/>
-                <menuseparator/>
-                <menuitem id="no-messagestyle-menuitem" label="&messageStyleNoExtraThemes.label;"
-                          disabled="true"/>
-              </menupopup>
-            </menulist>
-            <separator orient="vertical" class="thin"/>
-            <label id="getMoreMessageStyles" class="text-link" value="&messageStyleGetMore.label;"
-                   onclick="if (event.button == 0) { gThemePane.openURL(this.getAttribute('getMoreURL')); }"/>
-          </hbox>
-          <separator class="thin"/>
-          <label value="&messageStylePreview.label;"/>
-          <tooltip id="aHTMLTooltip" page="true"/>
-          <deck flex="1" id="previewDeck" selectedIndex="1">
-            <vbox flex="1" id="noPreviewScreen" align="center" pack="center">
-              <hbox id="noPreviewBox" align="top">
-                <vbox id="noPreviewInnerBox" flex="1">
-                  <label id="noPreviewTitle" value="&messageStyleNoPreview.title;"/>
-                  <description id="noAccountDesc">&messageStyleNoPreview.description;</description>
-                </vbox>
-              </hbox>
-            </vbox>
-            <browser flex="1" id="previewbrowser" type="content"
-                     browser-type="conversation" tooltip="aHTMLTooltip"/>
-          </deck>
-          <hbox align="baseline">
-            <label value="&messageStyleVariant.label;" control="themevariant"
-                   accesskey="&messageStyleVariant.accesskey;"/>
-            <menulist id="themevariant"
-                      preference="messenger.options.messagesStyle.variant"
-                      onselect="previewObserver.currentVariantChanged();"/>
-          </hbox>
-          <checkbox id="showHeaderCheckbox" label="&messageStyleShowHeader.label;"
-                    accesskey="&messageStyleShowHeader.accesskey;"
-                    preference="messenger.options.messagesStyle.showHeader"/>
-        </tabpanel>
-
-        <tabpanel orient="vertical" flex="1">
-          <hbox align="baseline">
-            <label value="&emoticonsTheme.label;" control="smileythemename"
-                   accesskey="&emoticonsTheme.accesskey;"/>
-            <menulist id="emoticons-themename"
-                      flex="1" crop="end"
-                      preference="messenger.options.emoticonsTheme"
-                      onselect="smileysPreview.displayCurrentTheme();">
-              <menupopup id="theme-menupopup">
-                <menuitem id="default-menuitem"
-                          label="&emoticonsDefaultTheme.label;"
-                          value="default"/>
-                <menuitem id="none-menuitem"
-                          label="&emoticonsDisabled.label;"
-                          value="none"/>
-                <menuseparator/>
-                <menuitem id="no-emoticons-menuitem" label="&emoticonsNoExtraThemes.label;"
-                          disabled="true"/>
-              </menupopup>
-            </menulist>
-            <separator orient="vertical" class="thin"/>
-            <label id="getMoreEmoticons" class="text-link" value="&emoticonsGetMore.label;"
-                   onclick="if (event.button == 0) { gThemePane.openURL(this.getAttribute('getMoreURL')); }"/>
-          </hbox>
-          <separator class="thin"/>
-          <description>&emoticonsPreview.description;</description>
-          <richlistbox orient="vertical" id="smileysPreview">
-            <listheader equalsize="always">
-              <treecol id="imageColumn" label="&emoticonsImageColumn.label;" flex="1"/>
-              <treecol id="textCodesColumn" label="&emoticonsTextCodesColumn.label;" flex="1"/>
-            </listheader>
-          </richlistbox>
-        </tabpanel>
-      </tabpanels>
-    </tabbox>
-  </prefpane>
-</overlay>
deleted file mode 100644
--- a/im/content/proxies.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-richlistitem[proxy] {
-  -moz-binding: url("chrome://instantbird/content/proxy.xml#proxy");
-}
deleted file mode 100644
--- a/im/content/proxies.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var gProxies = {
-  load: function proxy_load() {
-
-  // check the environment
-  // see what the global settings are
-  // build a list of existing proxies
-
-    var pcs = Cc["@instantbird.org/libpurple/core;1"]
-              .getService(Ci.purpleICoreService);
-
-    // Ensure purpleCoreService is initialized.
-    pcs.init();
-
-    var proxyInfoCtr = Components.Constructor("@instantbird.org/purple/proxyinfo;1",
-                                              "purpleIProxyInfo");
-    var proxyInfo;
-    var account = window.arguments[0];
-    if (account) {
-      proxyInfo = new proxyInfoCtr();
-      proxyInfo.type = Ci.purpleIProxyInfo.useGlobal;
-      document.getElementById("useGlobal").proxy = proxyInfo;
-      var globalProxy = pcs.globalProxy;
-      document.getElementById("globalProxy").textContent =
-        this.getProxyDescription(globalProxy);
-    }
-    else {
-      let global = document.getElementById("useGlobal");
-      global.remove();
-      document.getElementById("useAsGlobalSettings").collapsed = true;
-      document.getElementById("proxyDialogHeader").collapsed = true;
-    }
-
-    proxyInfo = new proxyInfoCtr();
-    proxyInfo.type = Ci.purpleIProxyInfo.noProxy;
-    document.getElementById("noProxy").proxy = proxyInfo;
-
-    var useEnv = document.getElementById("useEnvironment");
-    proxyInfo = new proxyInfoCtr();
-    proxyInfo.type = Ci.purpleIProxyInfo.useEnvVar;
-    useEnv.proxy = proxyInfo;
-    var environment = Cc["@mozilla.org/process/environment;1"]
-                        .getService(Ci.nsIEnvironment);
-    var envproxy = environment.get("HTTP_PROXY") ||
-                   environment.get("http_proxy") ||
-                   environment.get("HTTPPROXY");
-    if (envproxy)
-      document.getElementById("envProxy").textContent = envproxy;
-
-    var proxies = getIter(pcs.getProxies());
-    var proxyList = document.getElementById("proxylist");
-    for (let proxy of proxies) {
-      let item = document.createElement("richlistitem");
-      item.setAttribute("proxy", "true");
-      proxyList.insertBefore(item, document.getElementById("newProxy"));
-      item.proxy = proxy;
-    }
-
-    var key = null;
-    if (!account)
-      key = pcs.globalProxy.key;
-    else if (account.proxy)
-      key = account.proxy.key;
-
-    if (key) {
-      var items = proxyList.children;
-      for (let i = 0; i < items.length; ++i) {
-        if (items[i].proxy.key == key) {
-          proxyList.selectedItem = items[i];
-          break;
-        }
-      }
-      if (key != "global")
-        document.getElementById("useAsGlobalSettings").checked = false;
-    }
-  },
-
-  // Note: this function should not be called for a purpleIProxyInfo
-  // instance pointing to the Global Proxy
-  getProxyDescription: function proxy_description(aProxy) {
-    var type = aProxy.type;
-    var bundle = document.getElementById("proxiesBundle");
-
-    if (type == Ci.purpleIProxyInfo.noProxy)
-      return bundle.getString("proxies.directConnection");
-
-    if (type == Ci.purpleIProxyInfo.useEnvVar)
-      return bundle.getString("proxies.useEnvironment");
-
-    // At this point, we should have either a SOCKS or HTTP proxy.
-    var result;
-    if (type == Ci.purpleIProxyInfo.httpProxy)
-      result = bundle.getString("proxies.http");
-    else if (type == Ci.purpleIProxyInfo.socks4Proxy)
-      result = bundle.getString("proxies.socks4");
-    else if (type == Ci.purpleIProxyInfo.socks5Proxy)
-      result = bundle.getString("proxies.socks5");
-    else
-      throw "Unknown proxy type";
-
-    if (result)
-      result += " ";
-
-    if (aProxy.username)
-      result += aProxy.username + "@";
-
-    return result + aProxy.host + ":" + aProxy.port;
-  },
-
-  onSelect: function proxy_select() {
-    let selectedItem = document.getElementById("proxylist").selectedItem;
-    if (selectedItem) {
-      document.getElementById("useAsGlobalSettings").disabled =
-        selectedItem.id == "useGlobal";
-    }
-  },
-
-  getValue: function proxy_getValue(aId) {
-    return document.getElementById(aId).value;
-  },
-
-  accept: function proxy_accept() {
-    var pcs = Cc["@instantbird.org/libpurple/core;1"]
-              .getService(Ci.purpleICoreService);
-    var promptService = Services.prompt;
-    var item = document.getElementById("proxylist").selectedItem;
-    if (item.id == "newProxy") {
-      var type = this.getValue("proxyType");
-      var host = this.getValue("hostname");
-      var port = this.getValue("port");
-      if (!host || !port) {
-        promptService.alert(window, bundle.getString("proxies.alert.invalidInput.title"),
-                            bundle.getString("proxies.alert.invalidInput.message"));
-        return false;
-      }
-      var user = this.getValue("username");
-      var pass = this.getValue("password");
-      var proxies = getIter(pcs.getProxies());
-      for (let proxy of proxies) {
-        if (proxy.type == type && proxy.port == port &&
-            proxy.host == host && proxy.username == user) {
-          if (proxy.password == pass) {
-            item.proxy = proxy;
-          }
-          else {
-            if (promptService.confirm(window, bundle.getString("proxies.confirm.passwordUpdate.title"),
-                                      bundle.getString("proxies.confirm.passwordUpdate.message"))) {
-              proxy.password = pass;
-              item.proxy = proxy;
-            }
-            else
-              return false;
-          }
-          break;
-        }
-      }
-      if (!item.proxy)
-        item.proxy = pcs.createProxy(type, host, port, user, pass);
-    }
-
-    var account = window.arguments[0];
-    if (!account) {
-      pcs.globalProxy = item.proxy;
-      return true;
-    }
-
-    var globalCheckbox = document.getElementById("useAsGlobalSettings");
-    if (!globalCheckbox.disabled && globalCheckbox.checked) {
-      pcs.globalProxy = item.proxy;
-      account.proxy = document.getElementById("useGlobal").proxy;
-    }
-    else
-      account.proxy = item.proxy;
-    return true;
-  }
-};
deleted file mode 100644
--- a/im/content/proxies.xul
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://instantbird/skin/richlistbox.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/proxies.css" type="text/css"?>
-
-<!DOCTYPE window [
- <!ENTITY % proxiesDTD SYSTEM "chrome://instantbird/locale/proxies.dtd">
- %proxiesDTD;
-]>
-
-<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        id="proxyList"
-        windowtype="Messenger:Proxies"
-        onload="gProxies.load()"
-        title="&proxiesDialog.title;"
-        height="450"
-        width="400"
-        buttons="accept,cancel"
-        ondialogaccept="return gProxies.accept()"
-        persist="screenX screenY">
-  <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/proxies.js"/>
-
-  <stringbundle id="proxiesBundle" src="chrome://instantbird/locale/proxies.properties"/>
-
-  <dialogheader id="proxyDialogHeader" title="&proxiesDialogHeader.title;"
-                description="&proxiesDialogHeader.description;"/>
-
-  <richlistbox id="proxylist" flex="1" onselect="gProxies.onSelect();">
-    <richlistitem id="useGlobal" orient="vertical">
-      <description class="header">&proxiesDialog.useGlobalSettings;</description>
-      <description class="indent" id="globalProxy"/>
-    </richlistitem>
-    <richlistitem id="noProxy" orient="vertical">
-      <description class="header">&proxiesDialog.directConnection;</description>
-      <description class="indent">&proxiesDialog.noProxy;</description>
-    </richlistitem>
-    <richlistitem id="useEnvironment" orient="vertical">
-      <description class="header">&proxiesDialog.useEnvironment;</description>
-      <description class="indent" id="envProxy">&proxiesDialog.noProxyInEnvironment;</description>
-    </richlistitem>
-    <richlistitem id="newProxy" orient="vertical">
-      <hbox align="center">
-        <description class="header">&proxiesDialog.otherSetting;</description>
-        <menulist id="proxyType">
-          <menupopup>
-             <menuitem label="&proxiesDialog.http.label;" value="1"/>
-             <menuitem label="&proxiesDialog.socks4.label;" value="2"/>
-             <menuitem label="&proxiesDialog.socks5.label;" value="3"/>
-          </menupopup>
-        </menulist>
-      </hbox>
-
-      <hbox align="center">
-        <label value="&proxiesDialog.hostname.label;" control="hostname"/>
-        <textbox id="hostname" style="width: 7em;"/>
-        <spacer flex="1"/>
-        <label value="&proxiesDialog.port.label;" control="port"/>
-        <textbox id="port" type="number" style="width: 5em;"/>
-      </hbox>
-      <hbox align="center">
-        <label value="&proxiesDialog.username.label;" control="username"/>
-        <textbox id="username" style="width: 5em;"/>
-        <spacer flex="1"/>
-        <label value="&proxiesDialog.password.label;" control="password"/>
-        <textbox id="password" type="password" style="width: 5em;"/>
-      </hbox>
-    </richlistitem>
-  </richlistbox>
-
-  <checkbox id="useAsGlobalSettings" label="&proxiesDialog.useAsGlobal.label;" checked="true"/>
-
-</dialog>
deleted file mode 100644
--- a/im/content/proxy.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-<!DOCTYPE bindings [
-  <!ENTITY % proxiesDTD SYSTEM "chrome://instantbird/locale/proxies.dtd">
-  %proxiesDTD;
-]>
-
-<bindings id="proxiesBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="proxy" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content>
-    <xul:vbox flex="1">
-      <xul:hbox flex="1">
-        <xul:description class="header" anonid="type"/>
-        <xul:description class="indent" anonid="host" flex="1"/>
-        <xul:description anonid="port"/>
-      </xul:hbox>
-      <xul:description class="indent" anonid="username"/>
-    </xul:vbox>
-    </content>
-    <implementation>
-     <method name="_element">
-      <parameter name="aAnonid"/>
-      <body>
-      <![CDATA[
-        return document.getAnonymousElementByAttribute(this, "anonid", aAnonid);
-      ]]>
-      </body>
-     </method>
-
-     <property name="proxy">
-       <getter>
-         <![CDATA[
-           return this._proxy;
-         ]]>
-       </getter>
-       <setter>
-         <![CDATA[
-           this._proxy = val;
-
-           var bundle = document.getElementById("proxiesBundle");
-           var type;
-           if (this._proxy.type == Ci.purpleIProxyInfo.httpProxy)
-             type = bundle.getString("proxies.http");
-           else if (this._proxy.type == Ci.purpleIProxyInfo.socks4Proxy)
-             type = bundle.getString("proxies.socks4");
-           else if (this._proxy.type == Ci.purpleIProxyInfo.socks5Proxy)
-             type = bundle.getString("proxies.socks5");
-           else
-             throw "Unknown proxy type";
-
-           this._element("type").textContent = type;
-           this._element("host").textContent = this._proxy.host;
-           this._element("port").textContent = bundle.getFormattedString("proxies.port.string", [this._proxy.port]);
-
-           var usernameElt = this._element("username");
-           var username = this._proxy.username;
-           if (username)
-             usernameElt.textContent = bundle.getFormattedString("proxies.username.string", [this._proxy.username]);
-           else
-             usernameElt.setAttribute("hidden", "true");
-
-           return this._proxy;
-         ]]>
-       </setter>
-     </property>
-
-    </implementation>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/im/content/softwareUpdateOverlay.xul
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-
-<overlay id="softwareUpdateOverlay"
-         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<window id="updates">
-
-#include menus.xul.inc
-
-</window>
-
-</overlay>
deleted file mode 100644
--- a/im/content/tabbrowser.css
+++ /dev/null
@@ -1,95 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-tabconversation {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#tabbrowser");
-}
-
-.tabbrowser-tabs {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#tabbrowser-tabs");
-}
-
-.tabbrowser-tab {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#tabbrowser-tab");
-}
-
-.tabbrowser-arrowscrollbox {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#tabbrowser-arrowscrollbox");
-}
-
-.tabs-alltabs-popup {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#tabbrowser-alltabs-popup");
-}
-
-.tab-close-button, .tabs-closebutton {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#tabbrowser-close-tab-button");
-}
-
-.tab-close-button {
-  display: none;
-}
-
-.tabbrowser-tabs:not([closebuttons="noclose"]):not([closebuttons="closeatend"]) > .tabbrowser-tab[selected="true"] > * > * > .tab-close-button {
-  display: -moz-box;
-}
-
-.tabbrowser-tabs[closebuttons="alltabs"] > .tabbrowser-tab:not(:only-child) > * > * > .tab-close-button {
-  display: -moz-box;
-}
-
-.tabs-container:not([overflow="true"]) > .tabs-newtab-button,
-.tabs-container:not([overflow="true"]) > .tabs-alltabs-button,
-.tabs-container[overflow="true"] > .tabbrowser-arrowscrollbox > .tabs-newtab-button {
-  visibility: collapse;
-}
-
-.tabs-newtab-button > .toolbarbutton-text {
-  display: none;
-}
-
-/* Ensure two menuseparators aren't shown together when no tab-specific menuitems exist */
-#context_tabSpecificStartSeparator + #context_tabSpecificEndSeparator {
-  display: none;
-}
-
-/* Status panel */
-
-statuspanel {
-  -moz-binding: url("chrome://instantbird/content/tabbrowser.xml#statuspanel");
-  position: fixed;
-  margin-top: -3em;
-  max-width: calc(100% - 5px);
-  pointer-events: none;
-}
-
-statuspanel:-moz-locale-dir(ltr)[mirror],
-statuspanel:-moz-locale-dir(rtl):not([mirror]) {
-  left: auto;
-  right: 0;
-}
-
-statuspanel[sizelimit] {
-  max-width: 50%;
-}
-
-statuspanel[type=overLink] {
-  transition: opacity 120ms ease-out;
-  direction: ltr;
-}
-
-statuspanel[inactive] {
-  transition: none;
-  opacity: 0;
-}
-
-statuspanel[inactive][previoustype=overLink] {
-  transition: opacity 200ms ease-out;
-}
-
-.statuspanel-inner {
-  height: 3em;
-  width: 100%;
-  -moz-box-align: end;
-}
-
deleted file mode 100644
--- a/im/content/tabbrowser.xml
+++ /dev/null
@@ -1,2332 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % tabBrowserDTD SYSTEM "chrome://instantbird/locale/tabbrowser.dtd" >
-  %tabBrowserDTD;
-
-  <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
-  %globalDTD;
-]>
-
-<bindings id="tabBrowserBindings"
-          xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="tabbrowser">
-    <resources>
-      <stylesheet src="chrome://instantbird/content/tabbrowser.css"/>
-    </resources>
-
-    <content>
-      <xul:stringbundle anonid="tbstringbundle" src="chrome://instantbird/locale/tabbrowser.properties"/>
-      <xul:tabbox anonid="tabbox" flex="1" eventnode="document"
-                  onselect="if (event.target.localName != 'tabpanels') return;
-                            document.getBindingParent(this).updateCurrentTab();">
-        <xul:hbox class="tab-drop-indicator-bar" collapsed="true" chromedir="&locale.dir;"
-                  ondragover="document.getBindingParent(this)._onDragOver(event);"
-                  ondragleave="document.getBindingParent(this)._onDragLeave(event);"
-                  ondrop="document.getBindingParent(this)._onDrop(event);">
-          <xul:hbox class="tab-drop-indicator" mousethrough="always"/>
-        </xul:hbox>
-        <xul:hbox class="tabbrowser-strip" collapsed="true"
-                  context="_child"
-                  anonid="strip"
-                  ondragstart="document.getBindingParent(this)._onDragStart(event);"
-                  ondragover="document.getBindingParent(this)._onDragOver(event);"
-                  ondrop="document.getBindingParent(this)._onDrop(event);"
-                  ondragend="document.getBindingParent(this)._onDragEnd(event);"
-                  ondragleave="document.getBindingParent(this)._onDragLeave(event);">
-          <xul:menupopup id="tabContextMenu" onpopupshowing="return document.getBindingParent(this).tabContextMenuShowing(this);"
-                  onpopuphiding="return document.getBindingParent(this).tabContextMenuHiding(this)">
-            <xul:menuitem id="context_newTab" label="&newTab.label;" accesskey="&newTab.accesskey;"
-                          command="cmd_newtab"/>
-            <xul:menuseparator id="context_newTabSeparator"/>
-            <xul:menuitem id="context_openTabInWindow" label="&openTabInNewWindow.label;"
-                          accesskey="&openTabInNewWindow.accesskey;"
-                          tbattr="tabbrowser-multiple"
-                          oncommand="var tabbrowser = document.getBindingParent(this);
-                                     tabbrowser.replaceTabsWithWindow([tabbrowser.mContextTab]);"/>
-            <xul:menuseparator id="context_tabSpecificStartSeparator"/>
-            <xul:menuseparator id="context_tabSpecificEndSeparator"/>
-            <xul:menuitem id="context_closeOtherTabs" label="&closeOtherTabs.label;" accesskey="&closeOtherTabs.accesskey;"
-                          tbattr="tabbrowser-multiple"
-                          oncommand="var tabbrowser = document.getBindingParent(this);
-                                     tabbrowser.removeAllTabsBut(tabbrowser.mContextTab);"/>
-            <xul:menuitem id="context_closeTab" label="&closeTab.label;" accesskey="&closeTab.accesskey;"
-                          oncommand="var tabbrowser = document.getBindingParent(this);
-                                     tabbrowser.removeTab(tabbrowser.mContextTab);"/>
-          </xul:menupopup>
-
-          <xul:tabs class="tabbrowser-tabs" flex="1"
-                    anonid="tabcontainer"
-                    setfocus="false"
-                    onclick="document.getBindingParent(this).onTabClick(event);"
-                    xbl:inherits="onnewtab"
-                    ondblclick="document.getBindingParent(this).onTabBarDblClick(event);"
-                    onclosetab="document.getBindingParent(this).removeCurrentTab();"
-                    onkeypress="document.getBindingParent(this).onTabKeypress(event);">
-            <xul:tab selected="true" validate="never"
-                     onerror="this.removeAttribute('image');"
-                     maxwidth="250" width="0" minwidth="100" flex="100"
-                     class="tabbrowser-tab" label="&untitledTab;" crop="end"/>
-          </xul:tabs>
-        </xul:hbox>
-        <xul:tabpanels flex="1" class="tabbrowser-tabpanels plain" selectedIndex="0" anonid="panelcontainer">
-          <xul:tabpanel selected="true"/>
-        </xul:tabpanels>
-      </xul:tabbox>
-      <children/>
-    </content>
-    <implementation implements="nsIDOMEventListener">
-      <field name="mTabBox" readonly="true">
-        document.getAnonymousElementByAttribute(this, "anonid", "tabbox");
-      </field>
-      <field name="mTabDropIndicatorBar">
-        this.mTabBox.childNodes[0]
-      </field>
-      <field name="mStrip" readonly="true">
-        document.getAnonymousElementByAttribute(this, "anonid", "strip");
-      </field>
-      <field name="mTabContainer" readonly="true">
-        document.getAnonymousElementByAttribute(this, "anonid", "tabcontainer");
-      </field>
-      <field name="mPanelContainer" readonly="true">
-        document.getAnonymousElementByAttribute(this, "anonid", "panelcontainer");
-      </field>
-      <field name="mTabs" readonly="true">
-        this.mTabContainer.childNodes
-      </field>
-      <field name="mStringBundle">
-        document.getAnonymousElementByAttribute(this, "anonid", "tbstringbundle");
-      </field>
-      <field name="mCurrentTab">
-        null
-      </field>
-      <field name="mFirstTabIsDummy">
-        true
-      </field>
-      <field name="mContextTab">
-        null
-      </field>
-      <field name="arrowKeysShouldWrap" readonly="true">
-#ifdef XP_MACOSX
-        true
-#else
-        false
-#endif
-      </field>
-
-      <!-- _conversations and _tabPanels are used as caches
-           to avoid creating arrays multiple times
-           (See conversations and tabPanels properties) -->
-      <field name="_conversations">
-        null
-      </field>
-      <field name="_tabPanels">
-        null
-      </field>
-
-      <field name="_blockDblClick">
-        false
-      </field>
-      <field name="_autoScrollPopup">
-        null
-      </field>
-
-      <method name="updateTitlebar">
-        <body>
-          <![CDATA[
-            if (!this.mCurrentTab) // tabbrowser not initialized yet
-              return;
-
-            var newTitle = "";
-            var docTitle;
-            var docElement = this.ownerDocument.documentElement;
-            var sep = docElement.getAttribute("titlemenuseparator");
-
-            docTitle = this.mCurrentTab.getAttribute("label");
-            if (!docTitle)
-              docTitle = docElement.getAttribute("titledefault");
-
-            var modifier = docElement.getAttribute("titlemodifier");
-            if (docTitle) {
-              newTitle += docElement.getAttribute("titlepreface");
-              newTitle += docTitle;
-              if (modifier)
-                newTitle += sep;
-            }
-            newTitle += modifier;
-
-            this.ownerDocument.title = newTitle;
-          ]]>
-        </body>
-      </method>
-
-      <method name="tabContextMenuShowing">
-        <parameter name="aPopupMenu"/>
-        <body>
-          <![CDATA[
-            let tagName = document.popupNode.localName;
-            if (tagName == "tabs")
-              return false;
-            this.mContextTab = tagName == "tab" ?
-                               document.popupNode : this.selectedTab;
-            var disabled = this.mTabs.length == 1;
-            var multipleTabMenuItems = aPopupMenu.getElementsByAttribute("tbattr", "tabbrowser-multiple");
-            for (let item of multipleTabMenuItems)
-              item.disabled = disabled;
-            let tabSpecificEndSeparator = document.getElementById("context_tabSpecificEndSeparator");
-            if ("getPanelSpecificMenuItems" in this.mContextTab.linkedTabPanel) {
-              // Add in tab-specific menu items from the tab panel
-              let panelMenuItems = this.mContextTab.linkedTabPanel.getPanelSpecificMenuItems();
-              for (let item of panelMenuItems) {
-                aPopupMenu.insertBefore(item, tabSpecificEndSeparator);
-                if (item.actionOnShowing) {
-                  item.actionOnShowing();
-                  delete item.actionOnShowing;
-                }
-              }
-            }
-            return true;
-          ]]>
-        </body>
-      </method>
-
-      <method name="tabContextMenuHiding">
-        <parameter name="aPopupMenu"/>
-        <body>
-          <![CDATA[
-            // Remove tab specific menu items added onpopupshowing.
-            let range = document.createRange();
-            range.setStartAfter(document.getElementById("context_tabSpecificStartSeparator"));
-            range.setEndBefore(document.getElementById("context_tabSpecificEndSeparator"));
-            range.deleteContents();
-            return true;
-          ]]>
-        </body>
-      </method>
-
-      <method name="updateCurrentTab">
-        <parameter name="aForceUpdate"/>
-        <body>
-          <![CDATA[
-            /* This method handles transitioning when switching tabs.
-             * When a new tab is selected, mCurrentTab still refers to the
-             * previously selected tab until we set it in this method.
-             * this.selectedTab always refers to the actual selected tab
-             * (see the "selectedTab" property).
-             * Also, the selected* properties other than selectedTab use
-             * mCurrentTab and not selectedTab. This ensures a newly selected
-             * tab's properties are not accessed till this method is called.
-             */
-            // We check that the currently selected tab is different from
-            // mCurrentTab (i.e.  a different tab was selected) before updating.
-            if (!aForceUpdate && this.mCurrentTab == this.selectedTab)
-              return;
-
-            // Deactivate the previous browser if it existed...
-            if (this.selectedBrowser)
-              this.selectedBrowser.docShell.isActive = false;
-            // ... set mCurrentTab to newly selected tab...
-            this.mCurrentTab = this.selectedTab;
-            // ... and activate the new browser if it exists.
-            if (this.selectedBrowser) {
-              this.mCurrentTab.linkedBrowser.docShell.isActive =
-                (window.windowState != window.STATE_MINIMIZED);
-            }
-
-            if ("switchingToPanel" in this.selectedPanel)
-              this.selectedPanel.switchingToPanel();
-
-            // Update the window title.
-            this.updateTitlebar();
-
-            // We've selected the new tab, so go ahead and notify listeners.
-            var event = document.createEvent("Events");
-            event.initEvent("TabSelect", true, false);
-            this.mCurrentTab.dispatchEvent(event);
-
-            let focusedElement = document.commandDispatcher.focusedElement;
-            if (focusedElement &&
-                focusedElement.parentNode == this.mCurrentTab.parentNode &&
-                !focusedElement.collapsed) {
-              // The focus is on a tab in the same tab panel and we are not
-              // closing that tab: focus the new tab, not the conversation.
-              // Nevertheless update the visible conversation, but only if
-              // the user stays on the tab for more than a moment, to prevent
-              // tabs from being marked as read if the user is just scrolling
-              // past them with the arrow keys. 400ms is between "200ms - a bit
-              // too quick for people who repeat-keypress more slowly than me"
-              // and "600ms - a bit too noticeable already".
-              if (this._tabSelectTimer)
-                clearTimeout(this._tabSelectTimer);
-              if (!("onSelect" in this.selectedPanel))
-                return;
-              this._tabSelectTimer = setTimeout(function() {
-                this.selectedPanel.onSelect();
-              }.bind(this), 400);
-              return;
-            }
-
-            delete this._tabSelectTimer;
-            this.selectedPanel.focus();
-            if ("onSelect" in this.selectedPanel)
-              this.selectedPanel.onSelect();
-          ]]>
-        </body>
-      </method>
-
-      <method name="onTabKeypress">
-        <parameter name="event"/>
-        <body>
-          <![CDATA[
-            const tabKeyCodes = [KeyEvent.DOM_VK_TAB,
-                                 KeyEvent.DOM_VK_HOME, KeyEvent.DOM_VK_END,
-                                 KeyEvent.DOM_VK_UP, KeyEvent.DOM_VK_DOWN,
-                                 KeyEvent.DOM_VK_LEFT, KeyEvent.DOM_VK_RIGHT];
-
-            if (tabKeyCodes.includes(event.keyCode))
-              return;
-
-            // Focus the panel and pass the key to it.
-            event.preventDefault();
-            event.stopPropagation();
-            this.selectedPanel.focus();
-
-            const masks = Ci.nsIDOMNSEvent;
-            var modifiers = 0;
-            if (event.shiftKey)
-              modifiers |= masks.SHIFT_MASK;
-            if (event.ctrlKey)
-              modifiers |= masks.CONTROL_MASK;
-            if (event.altKey)
-              modifiers |= masks.ALT_MASK;
-            if (event.metaKey)
-              modifiers |= masks.META_MASK;
-            if (event.accelKey)
-              modifiers |= (navigator.platform.includes("Mac")) ? masks.META_MASK
-                                                                : masks.CONTROL_MASK;
-            // Can't use dispatchEvent to the textbox as these refuse untrusted key events.
-            this.selectedPanel.ownerDocument.defaultView
-              .QueryInterface(Ci.nsIInterfaceRequestor)
-              .getInterface(Ci.nsIDOMWindowUtils)
-              .sendKeyEvent(event.type, event.keyCode, event.charCode, modifiers);
-          ]]>
-        </body>
-      </method>
-
-      <method name="onTabClick">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            // We only handle the middle mouse button.
-            if (aEvent.button != 1)
-              return;
-
-            if (aEvent.target.localName == "tab")
-              this.removeTab(aEvent.target);
-            else if (aEvent.originalTarget.localName == "box")
-              Conversations.showNewTab();
-            else
-              return;
-
-            aEvent.stopPropagation();
-          ]]>
-        </body>
-      </method>
-
-      <field name="_prefObserver">({
-        tabbrowser: this,
-
-        observe: function(subject, topic, data)
-        {
-          if (topic == "nsPref:changed") {
-            switch (data) {
-            case "browser.tabs.autoHide":
-              if (this.tabbrowser.tabContainer.childNodes.length == 1 &amp;&amp;
-                  window.toolbar.visible) {
-                let visible =
-                  !Services.prefs.getBoolPref("browser.tabs.autoHide");
-                this.tabbrowser.setStripVisibilityTo(visible);
-              }
-              break;
-
-            case "messenger.conversations.useSeparateWindowsForMUCs":
-              if (this.tabbrowser.tabContainer.childNodes.length > 1 &amp;&amp;
-                  Services.prefs.getBoolPref("messenger.conversations.useSeparateWindowsForMUCs")) {
-                let convs = this.tabbrowser.conversations;
-                let firstIsChat = convs[0].hasAttribute("chat");
-                let movedTabs = [];
-                for (let i = 1; i &lt; convs.length; ++i)
-                  if (convs[i].hasAttribute("chat") != firstIsChat)
-                    movedTabs.push(convs[i].tab);
-                if (movedTabs.length)
-                  this.tabbrowser.replaceTabsWithWindow(movedTabs);
-              }
-              break;
-            }
-          }
-        },
-
-        QueryInterface: function(aIID)
-        {
-          if (aIID.equals(Components.interfaces.nsIObserver) ||
-              aIID.equals(Components.interfaces.nsISupports))
-            return this;
-          throw Components.results.NS_NOINTERFACE;
-        }
-        });
-      </field>
-
-      <method name="setStripVisibilityTo">
-        <parameter name="aShow"/>
-        <body>
-        <![CDATA[
-          this.mStrip.collapsed = !aShow;
-
-#if 0
-          if (aShow) {
-            // XXXdwh temporary unclean dependency on specific menu items in navigator.xul
-            document.getElementById("menu_closeWindow").hidden = false;
-            document.getElementById("menu_close").setAttribute("label", this.mStringBundle.getString("tabs.closeTab"));
-          }
-          else {
-            // XXXdwh temporary unclean dependency on specific menu items in navigator.xul
-            document.getElementById("menu_closeWindow").hidden = true;
-            document.getElementById("menu_close").setAttribute("label", this.mStringBundle.getString("tabs.close"));
-          }
-#endif
-        ]]>
-        </body>
-      </method>
-
-      <method name="getStripVisibility">
-        <body>
-          return !this.mStrip.collapsed;
-        </body>
-      </method>
-
-      <method name="addConversation">
-        <parameter name="aConv"/>
-        <body>
-          <![CDATA[
-            if (!this.mFirstTabIsDummy) {
-              if (Services.prefs.getBoolPref("messenger.conversations.useSeparateWindowsForMUCs") &&
-                  this.conversations[0] && aConv.isChat != this.conversations[0].hasAttribute("chat"))
-                return null;
-            }
-
-            let convPanel = document.createElementNS(
-              "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-              "conversation");
-            return this.addPanel(convPanel, aConv);
-          ]]>
-        </body>
-      </method>
-
-      <!-- Adds a tab panel.
-           Conversation specific properties and attributes are set if aConv is defined.
-
-           Note that a panel must focus a child element in its focus method to
-           prevent a previously focused element from retaining focus and continuing
-           to receive input.
-
-           If the panel contains a browser, it should set the browser property and
-           ensure that it has a parent element in the binding, so the status panel
-           can be attached after it.
-
-           If the panel has a findbar, it should set the findbar property to
-           automatically gain access to keyboard shortcuts.
-
-           Panels can implement the following methods to customize behavior in certain situations:
-           destroy:
-             Called before panel is removed.
-             The destructor doesn't always get called when the panel is removed,
-             so use this method to force any required cleanup.
-           finishImport:
-             When a tab is moved to a different window, a new instance of the panel
-             is created. This method is called on the new instance after adding it.
-             Use it to initialize the panel from the instance in the previous window,
-             which is passed as a parameter.
-           getPanelSpecificMenuItems:
-             Called before showing the tab's context menu.
-             Use it to return an array of menu items specific to this panel.
-           onResize:
-             Called when the window is resized.
-             Use it to perform any changes required due to the new size.
-           onSelect:
-             Called when the tab is selected and the user is not just scrolling past it.
-             Use it for things like marking conversations as read.
-           switchingToPanel:
-             Called when switching to the panel, even just in passing.
-             Use it to customize behavior when the panel is displayed.
-           switchingAwayFromPanel:
-             Called when switching away from the panel.
-             Use it to customize behavior when the panel is hidden. -->
-      <method name="addPanel">
-        <parameter name="aPanel"/>
-        <parameter name="aConv"/>
-        <!-- aPanel is a node containing the content of the panel
-             aConv is an (optional) imIConversation instance -->
-        <body>
-          <![CDATA[
-            if (!this.mFirstTabIsDummy) {
-              if (!Services.prefs.getBoolPref("messenger.conversations.openInTabs"))
-                return null;
-            }
-            // invalidate cache, because mTabContainer is about to change
-            this._conversations = null;
-            this._tabPanels = null;
-
-            this.mPanelContainer.appendChild(aPanel);
-
-            var t = this.mTabContainer.addTab();
-            aPanel.tab = t;
-            if (aPanel.browser)
-              t.linkedBrowser = aPanel.browser;
-
-            if (aConv) {
-              aConv.QueryInterface(Ci.imIConversation);
-              // set up the shared autoscroll popup if it doesn't exist yet
-              if (!this._autoScrollPopup) {
-                this._autoScrollPopup = aPanel.browser._createAutoScrollPopup();
-                this._autoScrollPopup.id = "autoscroller";
-                this.appendChild(this._autoScrollPopup);
-              }
-              aPanel.setAttribute("contenttooltip", this.getAttribute("contenttooltip"));
-              aPanel.setAttribute("contentcontextmenu", this.getAttribute("contentcontextmenu"));
-              aPanel.setAttribute("autoscrollpopup", this._autoScrollPopup.id);
-              aPanel.conv = aConv;
-              t.linkedConversation = aPanel;
-              // We start our browsers out as inactive, and then maintain
-              // activeness in updateCurrentTab.
-              aPanel.browser.docShell.isActive = false;
-            }
-
-            this.setStripVisibilityTo(
-              !(this.mFirstTabIsDummy && Services.prefs.getBoolPref("browser.tabs.autoHide")));
-
-            var uniqueId = "panel" + Date.now() + t._tPos;
-            aPanel.id = uniqueId;
-            t.linkedPanel = uniqueId;
-            t.linkedTabPanel = aPanel;
-            t.setAttribute("type", aPanel.nodeName);
-
-            this.updateCurrentTab(true);
-
-            if (this.mFirstTabIsDummy)
-              this.removeTab(this.mTabContainer.firstChild);
-            this.mFirstTabIsDummy = false;
-
-            return aPanel;
-          ]]>
-        </body>
-      </method>
-
-      <method name="warnAboutClosingTabs">
-      <parameter name="aAll"/>
-      <body>
-        <![CDATA[
-          var numTabs = this.mTabContainer.childNodes.length;
-          var reallyClose = true;
-          if (numTabs <= 1)
-            return reallyClose;
-
-          let unreadConvsCount = this.conversations.filter(function(conv) {
-            let tab = conv.tab;
-            return tab.hasAttribute("unread") &&
-                   (!tab.hasAttribute("chat") || tab.hasAttribute("attention"));
-          }).length;
-          if (!unreadConvsCount)
-            return reallyClose;
-          const pref = "browser.tabs.warnOnClose";
-          var shouldPrompt =
-            Services.prefs.getBoolPref("messenger.conversations.alwaysClose") &&
-            Services.prefs.getBoolPref(pref);
-
-          if (shouldPrompt) {
-            //default to true: if it were false, we wouldn't get this far
-            var warnOnClose = { value:true };
-            var bundle = this.mStringBundle;
-            if (!("PluralForm" in window))
-              ChromeUtils.import("resource://gre/modules/PluralForm.jsm");
-            var promptMessage = PluralForm.get(unreadConvsCount, bundle.getString("tabs.closeWarningMessage"))
-                                          .replace("#1", unreadConvsCount);
-            var closeButton = PluralForm.get(unreadConvsCount, bundle.getString("tabs.closeButton"));
-            // focus the window before prompting.
-            // this will raise any minimized window, which will
-            // make it obvious which window the prompt is for and will
-            // solve the problem of windows "obscuring" the prompt.
-            // see bug #350299 for more details
-            window.focus();
-            var promptService = Services.prompt;
-            var buttonPressed = promptService.confirmEx(window,
-                                                        bundle.getString('tabs.closeWarningTitle'),
-                                                        promptMessage,
-                                                        (promptService.BUTTON_TITLE_IS_STRING * promptService.BUTTON_POS_0)
-                                                        + (promptService.BUTTON_TITLE_CANCEL * promptService.BUTTON_POS_1),
-                                                        closeButton,
-                                                        null, null,
-                                                        bundle.getString('tabs.closeWarningPromptMe'),
-                                                        warnOnClose);
-            reallyClose = (buttonPressed == 0);
-            // don't set the pref unless they press OK and it's false
-            if (reallyClose && !warnOnClose.value)
-              Services.prefs.setBoolPref(pref, false);
-          }
-          return reallyClose;
-        ]]>
-      </body>
-      </method>
-
-      <method name="removeAllTabsBut">
-        <parameter name="aTab"/>
-        <body>
-          <![CDATA[
-            if (this.warnAboutClosingTabs(false)) {
-              this.selectedTab = aTab;
-
-              for (let i = this.mTabs.length - 1; i >= 0; --i) {
-                if (this.mTabs[i] != aTab)
-                  this.removeTab(this.mTabs[i]);
-              }
-            }
-          ]]>
-        </body>
-      </method>
-
-      <method name="removeCurrentTab">
-        <body>
-          <![CDATA[
-            this.removeTab(this.mCurrentTab);
-          ]]>
-        </body>
-      </method>
-
-      <field name="_removingTabs">
-        []
-      </field>
-
-      <method name="removeTab">
-        <parameter name="aTab"/>
-        <body>
-          <![CDATA[
-            this._endRemoveTab(this._beginRemoveTab(aTab, false, true));
-          ]]>
-        </body>
-      </method>
-
-      <!-- Tab close requests are ignored if the window is closing anyway,
-           e.g. when holding Ctrl+W. -->
-      <field name="_windowIsClosing">
-        false
-      </field>
-
-      <!-- Returns everything that _endRemoveTab needs in an array. -->
-      <method name="_beginRemoveTab">
-        <parameter name="aTab"/>
-        <parameter name="aTabWillBeMoved"/>
-        <parameter name="aCloseWindowFastpath"/>
-        <body>
-          <![CDATA[
-            if (this._removingTabs.includes(aTab) || this._windowIsClosing)
-              return null;
-
-            var browser = aTab.linkedBrowser;
-
-            if (!aTabWillBeMoved && browser) {
-              let ds = browser.docShell;
-              if (ds.contentViewer && !ds.contentViewer.permitUnload())
-                return null;
-            }
-
-            var closeWindow = false;
-            var l = this.mTabs.length - this._removingTabs.length;
-            if (l == 1) {
-              closeWindow = true;
-              if (aCloseWindowFastpath &&
-                  this._removingTabs.length == 0 &&
-                  (this._windowIsClosing = window.closeWindow(true)))
-                return null;
-            }
-            if (l == 2) {
-              let autohide = Services.prefs.getBoolPref("browser.tabs.autoHide");
-              let tabStripHide = !window.toolbar.visible;
-              if (autohide || tabStripHide)
-                this.setStripVisibilityTo(false);
-            }
-
-            this._removingTabs.push(aTab);
-
-            // We're committed to closing the tab now.
-            // Dispatch a notification.
-            // We dispatch it before any teardown so that event listeners can
-            // inspect the tab that's about to close.
-            var evt = document.createEvent("UIEvent");
-            evt.initUIEvent("TabClose", true, false, window, aTabWillBeMoved ? 1 : 0);
-            aTab.dispatchEvent(evt);
-
-            return [aTab, closeWindow];
-          ]]>
-        </body>
-      </method>
-
-      <method name="_endRemoveTab">
-        <parameter name="args"/>
-        <body>
-          <![CDATA[
-            if (!args)
-              return;
-            var [aTab, aCloseWindow] = args;
-
-            // update the UI early for responsiveness
-            aTab.collapsed = true;
-
-            this.tabContainer._fillTrailingGap();
-            this._blurTab(aTab);
-
-            this._removingTabs.splice(this._removingTabs.indexOf(aTab), 1);
-
-            if (aCloseWindow) {
-              this._windowIsClosing = true;
-              while (this._removingTabs.length)
-                this._endRemoveTab([this._removingTabs[0], false]);
-            } else if (!this._windowIsClosing) {
-              // see notes in addTab
-              let _delayedUpdate = function (aTabContainer) {
-                aTabContainer._updateCloseButtons();
-                aTabContainer.arrowScrollbox._updateScrollButtonsDisabledState();
-              };
-              setTimeout(_delayedUpdate, 0, this.tabContainer);
-            }
-
-            var panel = aTab.linkedTabPanel;
-
-            // Because of the way XBL works (fields just set JS
-            // properties on the element) and the code we have in place
-            // to preserve the JS objects for any elements that have
-            // JS properties set on them, the browser element won't be
-            // destroyed until the document goes away.  So we force a
-            // cleanup ourselves.
-            // This has to happen before we remove the child so that the
-            // XBL implementation of nsIObserver still works.
-            if ("destroy" in panel)
-              panel.destroy();
-
-            // Invalidate caches, as the tab is removed from the tab container.
-            this._conversations = null;
-            this._tabPanels = null;
-
-            // Remove the tab ...
-            aTab.remove();
-
-            // ... and fix up the _tPos properties immediately.
-            for (let i = aTab._tPos; i < this.mTabs.length; i++)
-              this.mTabs[i]._tPos = i;
-
-            // update first-tab/last-tab/beforeselected/afterselected attributes
-            if (this.selectedTab) // can be null if we removed the last tab
-              this.selectedTab._selected = true;
-
-            // This will unload the document. An unload handler could remove
-            // dependant tabs, so it's important that the tabbrowser is now in
-            // a consistent state (tab removed, tab positions updated, etc.).
-            // Also, it's important that another tab has been selected before
-            // the panel is removed; otherwise, a random sibling panel can flash.
-            panel.remove();
-
-            // As the panel is removed, the removal of a dependent document can
-            // cause the whole window to close. So at this point, it's possible
-            // that the binding is destructed.
-            if (this.mTabBox)
-              this.mTabBox.selectedPanel = this.selectedPanel;
-
-            if (aCloseWindow)
-              this._windowIsClosing = closeWindow(true);
-          ]]>
-        </body>
-      </method>
-
-      <method name="_blurTab">
-        <parameter name="aTab"/>
-        <body>
-          <![CDATA[
-            if (this.mCurrentTab != aTab)
-              return;
-
-            var tab = aTab;
-
-            do {
-              tab = tab.nextSibling;
-            } while (tab && this._removingTabs.includes(tab));
-
-            if (!tab) {
-              tab = aTab;
-
-              do {
-                tab = tab.previousSibling;
-              } while (tab && this._removingTabs.includes(tab));
-            }
-
-            this.selectedTab = tab;
-          ]]>
-        </body>
-      </method>
-
-      <method name="importPanel">
-        <parameter name="aOtherTab"/>
-        <body>
-          <![CDATA[
-            var remoteTabBrowser = aOtherTab.ownerDocument.defaultView.getTabBrowser();
-
-            // First, start teardown of the other browser.  Make sure to not
-            // fire the beforeunload event in the process.  Close the other
-            // window if this was its last tab.
-            var endRemoveArgs = remoteTabBrowser._beginRemoveTab(aOtherTab, true);
-
-            var newPanel = document.createElementNS(
-              "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-              aOtherTab.linkedTabPanel.nodeName);
-            this.addPanel(newPanel, aOtherTab.linkedTabPanel.conv || null);
-
-            var aOurTab = newPanel.tab;
-
-            // Tell the new panel to sync up with the other one.
-            if ("finishImport" in newPanel)
-              newPanel.finishImport(aOtherTab.linkedTabPanel);
-
-            // Finish tearing down the tab that's going away.
-            remoteTabBrowser._endRemoveTab(endRemoveArgs);
-
-            // If the tab was already selected (this happpens in the scenario
-            // of replaceTabsWithWindow), notify onLocationChange, etc.
-            if (aOurTab == this.selectedTab)
-              this.updateCurrentTab(true);
-
-            return newPanel;
-          ]]>
-        </body>
-      </method>
-
-      <method name="onTabBarDblClick">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            // See hack note in the tabbrowser-close-button binding.
-            // 0 represents the primary mouse button.
-            if (!this._blockDblClick && aEvent.button == 0 &&
-                aEvent.originalTarget.localName == "box")
-              Conversations.showNewTab();
-          ]]>
-        </body>
-      </method>
-
-      <method name="selectPanel">
-        <parameter name="aPanel"/>
-        <body>
-        <![CDATA[
-          if (aPanel.parentNode != this.mPanelContainer)
-            throw "Trying to select a panel that's not in this tabbrowser?";
-          this.selectedTab = aPanel.tab;
-          aPanel.focus();
-          if ("onSelect" in aPanel)
-            aPanel.onSelect();
-        ]]>
-        </body>
-      </method>
-
-      <method name="selectTabAtIndex">
-        <parameter name="aIndex"/>
-        <parameter name="aEvent"/>
-        <body>
-        <![CDATA[
-          // count backwards for aIndex < 0
-          if (aIndex < 0)
-            aIndex += this.mTabs.length;
-
-          if (aIndex >= 0 &&
-              aIndex < this.mTabs.length &&
-              aIndex != this.tabContainer.selectedIndex)
-            this.selectedTab = this.mTabs[aIndex];
-
-          if (aEvent) {
-            aEvent.preventDefault();
-            aEvent.stopPropagation();
-          }
-        ]]>
-        </body>
-      </method>
-
-      <property name="tabContainer" readonly="true">
-        <getter>
-          return this.mTabContainer;
-        </getter>
-      </property>
-
-      <property name="selectedTab">
-        <getter>
-          return this.mTabBox.selectedTab;
-        </getter>
-        <setter>
-          <![CDATA[
-          // Update the tab
-          this.mTabBox.selectedTab = val;
-          return val;
-          ]]>
-        </setter>
-      </property>
-
-      <method name="getStatusPanel">
-        <body><![CDATA[
-          // These two methods are kept close to the original, but note
-          // that unlike the tabbrowser.xml in browser/, we need to add
-          // a statuspanel to all tab panels with a browser element.
-
-          if (!this.selectedBrowser) {
-            Cu.reportError("Browser element in a tab panel " +
-              "without a browser property");
-            return null;
-          }
-
-          let statusPanel = this.selectedPanel._statusPanel;
-          if (!statusPanel) {
-            statusPanel =
-              document.createElementNS(this.namespaceURI, "statuspanel");
-            statusPanel.setAttribute("inactive", "true");
-            statusPanel.setAttribute("layer", "true");
-            let contentDocument = this.selectedBrowser.contentDocument;
-            contentDocument.addEventListener("visibilitychange", () => {
-              if (contentDocument.hidden)
-                statusPanel.label = "";
-            });
-            this.selectedPanel._statusPanel = statusPanel;
-            this._appendStatusPanel();
-          }
-          return statusPanel;
-        ]]></body>
-      </method>
-
-      <method name="_appendStatusPanel">
-        <body><![CDATA[
-          let panel = this.selectedPanel;
-          if (panel && panel._statusPanel) {
-            let browser = this.selectedBrowser;
-            let browserContainer = browser.parentNode;
-            browserContainer.insertBefore(panel._statusPanel, browser.nextSibling);
-          }
-        ]]></body>
-      </method>
-
-      <property name="selectedBrowser"
-                onget="return this.mCurrentTab.linkedBrowser || null;"
-                readonly="true"/>
-
-      <property name="selectedConversation"
-                onget="return this.mCurrentTab.linkedConversation || null;"
-                readonly="true"/>
-
-      <property name="selectedPanel"
-                onget="return this.mCurrentTab.linkedTabPanel || null;"
-                readonly="true"/>
-
-      <property name="tabPanels" readonly="true">
-       <getter>
-          <![CDATA[
-            return this._tabPanels ||
-                   (this._tabPanels = Array.from(this.mTabs, tab => tab.linkedTabPanel));
-          ]]>
-        </getter>
-      </property>
-
-      <property name="conversations" readonly="true">
-       <getter>
-        <![CDATA[
-          if (!this._conversations) {
-            this._conversations = Array.from(this.mTabs)
-                                       .filter(aTab => aTab.linkedConversation)
-                                       .map(aTab => aTab.linkedConversation);
-          }
-          return this._conversations;
-        ]]>
-        </getter>
-      </property>
-
-      <method name="_onDragStart">
-        <parameter name="aEvent"/>
-        <body>
-        <![CDATA[
-          var target = aEvent.target;
-          if (target.localName == "tab" &&
-              aEvent.originalTarget.localName != "toolbarbutton") {
-            var dt = aEvent.dataTransfer;
-            dt.mozSetDataAt(TAB_DROP_TYPE, target, 0);
-
-            aEvent.stopPropagation();
-            target._dragOffsetX =
-              aEvent.screenX - window.screenX - target.getBoundingClientRect().left;
-            target._dragOffsetY = aEvent.screenY - window.screenY;
-          }
-
-          this._dragLeftWindow = false;
-        ]]>
-        </body>
-      </method>
-
-      <method name="_setEffectAllowedForDataTransfer">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            var dt = aEvent.dataTransfer;
-            // Disallow dropping multiple items
-            if (dt.mozItemCount > 1)
-              return dt.effectAllowed = "none";
-
-            var types = dt.mozTypesAt(0);
-            var sourceNode = null;
-            // tabs are always added as the first type
-            if (types[0] == TAB_DROP_TYPE) {
-              var sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
-              if (sourceNode instanceof XULElement &&
-                  sourceNode.localName == "tab" &&
-                  (sourceNode.parentNode == this.mTabContainer ||
-                   (sourceNode.ownerDocument.defaultView instanceof ChromeWindow &&
-                    sourceNode.ownerDocument.documentElement.getAttribute("windowtype") == "Messenger:convs"))) {
-                if (sourceNode.parentNode == this.mTabContainer &&
-                    (aEvent.screenX >= sourceNode.boxObject.screenX &&
-                      aEvent.screenX <= (sourceNode.boxObject.screenX +
-                                         sourceNode.boxObject.width))) {
-                  return dt.effectAllowed = "none";
-                }
-
-                return dt.effectAllowed = "copyMove";
-              }
-            }
-
-            return dt.effectAllowed = "none";
-          ]]>
-        </body>
-      </method>
-
-      <method name="_onDragOver">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            var effects = this._setEffectAllowedForDataTransfer(aEvent);
-
-            var ib = this.mTabDropIndicatorBar;
-            if (effects == "" || effects == "none") {
-              ib.collapsed = "true";
-              return;
-            }
-            aEvent.preventDefault();
-            aEvent.stopPropagation();
-
-            var tabStrip = this.mTabContainer.arrowScrollbox;
-            var ltr = (window.getComputedStyle(this.parentNode, null).direction
-                       == "ltr");
-
-            // autoscroll the tab strip if we drag over the scroll
-            // buttons, even if we aren't dragging a tab, but then
-            // return to avoid drawing the drop indicator
-            var pixelsToScroll = 0;
-            if (this.mTabContainer.getAttribute("overflow") == "true") {
-              var targetAnonid = aEvent.originalTarget.getAttribute("anonid");
-              switch (targetAnonid) {
-                case "scrollbutton-up":
-                  pixelsToScroll = tabStrip.scrollIncrement * -1;
-                  break;
-                case "scrollbutton-down":
-                case "alltabs-button":
-                case "newtab-button":
-                  pixelsToScroll = tabStrip.scrollIncrement;
-                  break;
-              }
-              if (pixelsToScroll)
-                tabStrip.scrollByPixels((ltr ? 1 : -1) * pixelsToScroll);
-            }
-
-            var newIndex = this.getNewIndex(aEvent);
-            var ib = this.mTabDropIndicatorBar;
-            var ind = ib.firstChild;
-            var tabStripBoxObject = tabStrip.scrollBoxObject;
-            var minMargin = tabStripBoxObject.x - this.boxObject.x;
-            // make sure we don't place the tab drop indicator past the
-            // edge, or the containing box will flex and stretch
-            // the tab drop indicator bar, which will flex the url bar.
-            // XXX todo
-            // just use first value if you can figure out how to get
-            // the tab drop indicator to crop instead of flex and stretch
-            // the tab drop indicator bar.
-            var maxMargin = Math.min(minMargin + tabStripBoxObject.width,
-                                     ib.boxObject.x + ib.boxObject.width -
-                                     ind.boxObject.width);
-            if (!ltr)
-              [minMargin, maxMargin] = [this.boxObject.width - maxMargin,
-                                        this.boxObject.width - minMargin];
-            var newMargin, tabBoxObject;
-            if (pixelsToScroll) {
-              // if we are scrolling, put the drop indicator at the edge
-              // so that it doesn't jump while scrolling
-              newMargin = (pixelsToScroll > 0) ? maxMargin : minMargin;
-            }
-            else {
-              if (newIndex == this.mTabs.length) {
-                tabBoxObject =  this.mTabs[newIndex-1].boxObject;
-                if (ltr)
-                  newMargin = tabBoxObject.screenX - this.boxObject.screenX
-                              + tabBoxObject.width;
-                else
-                  newMargin = this.boxObject.screenX - tabBoxObject.screenX
-                              + this.boxObject.width;
-              }
-              else {
-                tabBoxObject =  this.mTabs[newIndex].boxObject;
-                if (ltr)
-                  newMargin = tabBoxObject.screenX - this.boxObject.screenX;
-                else
-                  newMargin = this.boxObject.screenX - tabBoxObject.screenX
-                              + this.boxObject.width - tabBoxObject.width;
-              }
-              // ensure we never place the drop indicator beyond our limits
-              if (newMargin < minMargin)
-                newMargin = minMargin;
-              else if (newMargin > maxMargin)
-                newMargin = maxMargin;
-            }
-
-            ind.style.marginInlineStart = newMargin + 'px';
-
-            ib.collapsed = false;
-          ]]>
-        </body>
-      </method>
-
-      <method name="_onDrop">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            var dt = aEvent.dataTransfer;
-            var dropEffect = dt.dropEffect;
-            var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
-            // not our drop then
-            if (!draggedTab)
-              return;
-
-            this.mTabDropIndicatorBar.collapsed = true;
-            aEvent.stopPropagation();
-
-            if (draggedTab.parentNode == this.mTabContainer) {
-              var newIndex = this.getNewIndex(aEvent);
-              // move the dropped tab
-              if (newIndex > draggedTab._tPos)
-                newIndex--;
-              if (newIndex != draggedTab._tPos)
-                this.moveTabTo(draggedTab, newIndex);
-            }
-            else {
-              // swap the dropped tab with a new one we create and then close
-              // it in the other window (making it seem to have moved between
-              // windows)
-
-              // Compute the new index *before* we add a tab
-              newIndex = this.getNewIndex(aEvent);
-              var panel = this.importPanel(draggedTab);
-              this.moveTabTo(panel.tab, newIndex);
-
-              // We need to set selectedTab after we've swapped the docShells
-              this.selectedTab = panel.tab;
-            }
-          ]]>
-        </body>
-      </method>
-
-      <method name="_onDragEnd">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            // Note: while this case is correctly handled here, this event
-            // isn't dispatched when the tab is moved within the tabstrip,
-            // see bug 460801.
-
-            // Collapse the drop indicator, just to be sure...
-            this.mTabDropIndicatorBar.collapsed = true;
-
-            // * mozUserCancelled = the user pressed ESC to cancel the drag
-            var dt = aEvent.dataTransfer;
-            if (dt.mozUserCancelled || dt.dropEffect != "none")
-              return;
-
-            // Disable detach within the browser toolbox
-            var eX = aEvent.screenX;
-            var wX = window.screenX;
-            var eY = aEvent.screenY;
-            // check if the drop point is horizontally within the window
-            if (eX > wX && eX < (wX + window.outerWidth)) {
-              var bo = this.mTabContainer.arrowScrollbox.boxObject;
-              // also avoid detaching if the the tab was dropped too close to
-              // the tabbar (half a tab)
-              var endScreenY = bo.screenY + 1.5 * bo.height;
-              if (eY < endScreenY && eY > window.screenY)
-                return;
-            }
-
-            var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
-            let win = this.replaceTabsWithWindow([draggedTab]);
-            if (win) {
-              win.moveTo(eX - draggedTab._dragOffsetX,
-                         eY - draggedTab._dragOffsetY);
-            }
-            aEvent.stopPropagation();
-          ]]>
-        </body>
-      </method>
-
-      <!-- Moves a tab to a new browser window, unless it's already the only tab
-           in the current window, in which case this will do nothing. -->
-      <method name="replaceTabsWithWindow">
-        <parameter name="aTabs"/>
-        <body>
-          <![CDATA[
-            if (this.mTabs.length == 1)
-              return null;
-
-            var ma = Cc["@mozilla.org/array;1"]
-                       .createInstance(Ci.nsIMutableArray);
-            aTabs.forEach(function(aTab) { ma.appendElement(aTab); });
-
-            // tell a new window to take the "dropped" tab
-            return Services.ww.openWindow(window,
-                                          getConvWindowURL(),
-                                          null,
-                                          "chrome,dialog=no,all",
-                                          ma);
-          ]]>
-        </body>
-      </method>
-
-      <method name="_onDragLeave">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            this.mTabDropIndicatorBar.collapsed = true;
-            aEvent.stopPropagation();
-          ]]>
-        </body>
-      </method>
-
-      <method name="moveTabTo">
-        <parameter name="aTab"/>
-        <parameter name="aIndex"/>
-        <body>
-        <![CDATA[
-          // Invalidate caches.
-          this._conversations = null;
-          this._tabPanels = null;
-
-          var oldPosition = aTab._tPos;
-
-          aIndex = aIndex < aTab._tPos ? aIndex: aIndex+1;
-          this.mCurrentTab._selected = false;
-          // use .item() instead of [] because dragging to the end of the strip goes out of
-          // bounds: .item() returns null (so it acts like appendChild), but [] throws
-          this.mTabContainer.insertBefore(aTab, this.mTabContainer.childNodes.item(aIndex));
-          // invalidate cache, because mTabContainer is about to change
-          this._conversations = null;
-          this._tabPanels = null;
-
-          var i;
-          for (i = 0; i < this.mTabContainer.childNodes.length; i++) {
-            this.mTabContainer.childNodes[i]._tPos = i;
-            this.mTabContainer.childNodes[i]._selected = false;
-          }
-          this.mCurrentTab._selected = true;
-          this.mTabContainer.arrowScrollbox.scrollBoxObject.ensureElementIsVisible(this.mCurrentTab);
-
-          var evt = document.createEvent("UIEvents");
-          evt.initUIEvent("TabMove", true, false, window, oldPosition);
-          aTab.dispatchEvent(evt);
-
-          return aTab;
-        ]]>
-        </body>
-      </method>
-
-      <method name="getNewIndex">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            var i;
-            if (window.getComputedStyle(this.parentNode, null).direction == "ltr") {
-              for (i = aEvent.target.localName == "tab" ? aEvent.target._tPos : 0; i < this.mTabs.length; i++)
-                if (aEvent.screenX < this.mTabs[i].boxObject.screenX + this.mTabs[i].boxObject.width / 2)
-                  return i;
-            } else {
-              for (i = aEvent.target.localName == "tab" ? aEvent.target._tPos : 0; i < this.mTabs.length; i++)
-                if (aEvent.screenX > this.mTabs[i].boxObject.screenX + this.mTabs[i].boxObject.width / 2)
-                  return i;
-            }
-            return this.mTabs.length;
-          ]]>
-        </body>
-      </method>
-
-
-      <method name="moveTabForward">
-        <body>
-          <![CDATA[
-            var tabPos = this.mCurrentTab._tPos;
-            if (tabPos < this.mTabs.length - 1) {
-              this.moveTabTo(this.mCurrentTab, tabPos + 1);
-              this.mCurrentTab.focus();
-            }
-            else if (this.arrowKeysShouldWrap)
-              this.moveTabToStart();
-          ]]>
-        </body>
-      </method>
-
-      <method name="moveTabBackward">
-        <body>
-          <![CDATA[
-            var tabPos = this.mCurrentTab._tPos;
-            if (tabPos > 0) {
-              this.moveTabTo(this.mCurrentTab, tabPos - 1);
-              this.mCurrentTab.focus();
-            }
-            else if (this.arrowKeysShouldWrap)
-              this.moveTabToEnd();
-          ]]>
-        </body>
-      </method>
-
-      <method name="moveTabToStart">
-        <body>
-          <![CDATA[
-            var tabPos = this.mCurrentTab._tPos;
-            if (tabPos > 0) {
-              this.moveTabTo(this.mCurrentTab, 0);
-              this.mCurrentTab.focus();
-            }
-          ]]>
-        </body>
-      </method>
-
-      <method name="moveTabToEnd">
-        <body>
-          <![CDATA[
-            var tabPos = this.mCurrentTab._tPos;
-            if (tabPos < this.mTabs.length - 1) {
-              this.moveTabTo(this.mCurrentTab, this.mTabs.length - 1);
-              this.mCurrentTab.focus();
-            }
-          ]]>
-        </body>
-      </method>
-
-      <method name="moveTabOver">
-        <parameter name="aEvent"/>
-        <body>
-          <![CDATA[
-            var direction = window.getComputedStyle(this.parentNode, null).direction;
-            if ((direction == "ltr" && aEvent.keyCode == KeyEvent.DOM_VK_RIGHT) ||
-                (direction == "rtl" && aEvent.keyCode == KeyEvent.DOM_VK_LEFT))
-              this.moveTabForward();
-            else
-              this.moveTabBackward();
-          ]]>
-        </body>
-      </method>
-
-      <method name="dragDropSecurityCheck">
-        <parameter name="aEvent"/>
-        <parameter name="aDragSession"/>
-        <parameter name="aUri"/>
-        <body>
-          <![CDATA[
-            nsDragAndDrop.dragDropSecurityCheck(aEvent, aDragSession, aUri);
-          ]]>
-        </body>
-      </method>
-
-      <field name="_keyEventHandler" readonly="true">
-      <![CDATA[({
-        tabbrowser: this,
-        handleEvent: function handleEvent(aEvent) {
-          if (!aEvent.isTrusted) {
-            // Don't let untrusted events mess with tabs.
-            return;
-          }
-
-          if ('altKey' in aEvent && aEvent.altKey)
-            return;
-#ifdef XP_MACOSX
-          if ('metaKey' in aEvent && aEvent.metaKey) {
-            var offset = 1;
-            switch (aEvent.charCode) {
-              case '}'.charCodeAt(0):
-                offset *= -1;
-              case '{'.charCodeAt(0):
-                if (window.getComputedStyle(this.tabbrowser, null).direction == "ltr")
-                  offset *= -1;
-
-                this.tabbrowser.mTabContainer.advanceSelectedTab(offset, true);
-                aEvent.stopPropagation();
-                aEvent.preventDefault();
-                return;
-            }
-            if ('shiftKey' in aEvent && aEvent.shiftKey) {
-              var offset = 1;
-              switch (aEvent.keyCode) {
-                case KeyEvent.DOM_VK_RIGHT:
-                  offset *= -1;
-                case KeyEvent.DOM_VK_LEFT:
-                  if (window.getComputedStyle(this.tabbrowser, null).direction == "ltr")
-                    offset *= -1;
-
-                  this.tabbrowser.mTabContainer.advanceSelectedTab(offset, true);
-                  aEvent.stopPropagation();
-                  aEvent.preventDefault();
-              }
-              return;
-            }
-#else
-          if (('ctrlKey' in aEvent && aEvent.ctrlKey) &&
-              !('shiftKey' in aEvent && aEvent.shiftKey) &&
-              !('metaKey' in aEvent && aEvent.metaKey)) {
-            if (aEvent.keyCode == KeyEvent.DOM_VK_F4) {
-              this.tabbrowser.removeCurrentTab();
-
-              aEvent.stopPropagation();
-              aEvent.preventDefault();
-              return;
-            }
-#endif
-            if (aEvent.originalTarget.localName == "tab") {
-              switch (aEvent.keyCode) {
-                case KeyEvent.DOM_VK_UP:
-                  this.tabbrowser.moveTabBackward();
-                  break;
-                case KeyEvent.DOM_VK_DOWN:
-                  this.tabbrowser.moveTabForward();
-                  break;
-                case KeyEvent.DOM_VK_RIGHT:
-                case KeyEvent.DOM_VK_LEFT:
-                  this.tabbrowser.moveTabOver(aEvent);
-                  break;
-                case KeyEvent.DOM_VK_HOME:
-                  this.tabbrowser.moveTabToStart();
-                  break;
-                case KeyEvent.DOM_VK_END:
-                  this.tabbrowser.moveTabToEnd();
-                  break;
-                default:
-                  // Stop the keypress event for the above keyboard
-                  // shortcuts only.
-                  return;
-              }
-              aEvent.stopPropagation();
-              aEvent.preventDefault();
-            }
-          }
-        }
-      })]]>
-      </field>
-
-      <method name="handleEvent">
-        <parameter name="aEvent"/>
-        <body><![CDATA[
-          switch (aEvent.type) {
-            case "sizemodechange":
-              if (this.selectedBrowser && aEvent.target == window) {
-                this.selectedBrowser.docShell.isActive =
-                  (window.windowState != window.STATE_MINIMIZED);
-              }
-              break;
-          }
-        ]]></body>
-      </method>
-
-      <field name="_windowActivateHandler" readonly="true">
-      <![CDATA[({
-        tabbrowser: this,
-        handleEvent: function handleEvent() {
-          if ("switchingToPanel" in this.tabbrowser.selectedPanel)
-            this.tabbrowser.selectedPanel.switchingToPanel();
-        }
-      })]]>
-      </field>
-
-      <field name="_windowDeactivateHandler" readonly="true">
-      <![CDATA[({
-        tabbrowser: this,
-        handleEvent: function handleEvent() {
-          if ("switchingAwayFromPanel" in this.tabbrowser.selectedPanel)
-            this.tabbrowser.selectedPanel.switchingAwayFromPanel();
-        }
-      })]]>
-      </field>
-
-      <constructor>
-        <![CDATA[
-          this.mCurrentTab = this.mTabContainer.firstChild;
-          // Dummy tab is not a conversation
-          this.mCurrentTab.linkedTabPanel = this.mPanelContainer.firstChild;
-          this.mCurrentTab.linkedTabPanel.tab = this.mCurrentTab;
-
-          document.addEventListener("keypress", this._keyEventHandler);
-          document.addEventListener("sizemodechange", this);
-          window.addEventListener("deactivate", this._windowDeactivateHandler);
-          window.addEventListener("activate", this._windowActivateHandler);
-
-          var uniqueId = "panel" + Date.now();
-          this.mCurrentTab.linkedTabPanel.id = uniqueId;
-          this.mCurrentTab.linkedPanel = uniqueId;
-          this.mCurrentTab._tPos = 0;
-
-          Services.prefs.addObserver("browser.tabs.autoHide", this._prefObserver);
-          Services.prefs.addObserver("messenger.conversations.useSeparateWindowsForMUCs", this._prefObserver);
-        ]]>
-      </constructor>
-
-      <destructor>
-        <![CDATA[
-          document.removeEventListener("keypress", this._keyEventHandler);
-          window.removeEventListener("sizemodechange", this);
-          window.removeEventListener("deactivate", this._windowDeactivateHandler);
-          window.removeEventListener("activate", this._windowActivateHandler);
-          Services.prefs.removeObserver("browser.tabs.autoHide", this._prefObserver);
-          Services.prefs.removeObserver("messenger.conversations.useSeparateWindowsForMUCs", this._prefObserver);
-        ]]>
-      </destructor>
-    </implementation>
-  </binding>
-
-  <binding id="statuspanel" display="xul:hbox">
-    <content>
-      <xul:hbox class="statuspanel-inner">
-        <xul:label class="statuspanel-label"
-                   role="status"
-                   aria-live="off"
-                   xbl:inherits="value=label,crop,mirror"
-                   flex="1"
-                   crop="end"/>
-      </xul:hbox>
-    </content>
-
-    <implementation implements="nsIDOMEventListener">
-      <constructor><![CDATA[
-        window.addEventListener("resize", this);
-      ]]></constructor>
-
-      <destructor><![CDATA[
-        window.removeEventListener("resize", this);
-        MousePosTracker.removeListener(this);
-      ]]></destructor>
-
-      <property name="label">
-        <setter><![CDATA[
-          if (!this.label) {
-            this.removeAttribute("mirror");
-            this.removeAttribute("sizelimit");
-          }
-
-          this.style.minWidth = this.getAttribute("type") == "status" &&
-                                this.getAttribute("previoustype") == "status"
-                                  ? getComputedStyle(this).width : "";
-
-          if (val) {
-            this.setAttribute("label", val);
-            if (this.hasAttribute("flipped"))
-              this.setAttribute("mirror", "true");
-            this.removeAttribute("inactive");
-            this._calcMouseTargetRect();
-            MousePosTracker.addListener(this);
-          } else {
-            this.setAttribute("inactive", "true");
-            MousePosTracker.removeListener(this);
-          }
-
-          return val;
-        ]]></setter>
-        <getter>
-          return this.hasAttribute("inactive") ? "" : this.getAttribute("label");
-        </getter>
-      </property>
-
-      <method name="getMouseTargetRect">
-        <body><![CDATA[
-          return this._mouseTargetRect;
-        ]]></body>
-      </method>
-
-      <method name="onMouseEnter">
-        <body>
-          this._mirror();
-        </body>
-      </method>
-
-      <method name="onMouseLeave">
-        <body>
-          this._mirror();
-        </body>
-      </method>
-
-      <method name="handleEvent">
-        <parameter name="event"/>
-        <body><![CDATA[
-          if (!this.label)
-            return;
-
-          switch (event.type) {
-            case "resize":
-              this._calcMouseTargetRect();
-              break;
-          }
-        ]]></body>
-      </method>
-
-      <method name="_calcMouseTargetRect">
-        <body><![CDATA[
-          let container = this.parentNode;
-          let xor = (a, b) => a != b;
-          let alignRight = xor(getComputedStyle(container).direction == "rtl",
-                               this.hasAttribute("flipped"));
-          let panelRect = this.getBoundingClientRect();
-          let containerRect = container.getBoundingClientRect();
-
-          this._mouseTargetRect = {
-            top:    panelRect.top,
-            bottom: panelRect.bottom,
-            left:   alignRight ? containerRect.right - panelRect.width : containerRect.left,
-            right:  alignRight ? containerRect.right : containerRect.left + panelRect.width
-          };
-        ]]></body>
-      </method>
-
-      <method name="_mirror">
-        <body>
-          if (this.hasAttribute("mirror"))
-            this.removeAttribute("mirror");
-          else
-            this.setAttribute("mirror", "true");
-
-          if (!this.hasAttribute("sizelimit")) {
-            this.setAttribute("sizelimit", "true");
-            this._calcMouseTargetRect();
-          }
-        </body>
-      </method>
-    </implementation>
-  </binding>
-
-  <binding id="tabbrowser-arrowscrollbox" extends="chrome://global/content/bindings/scrollbox.xml#arrowscrollbox-clicktoscroll">
-    <implementation>
-      <!-- Override scrollbox.xml method, since our scrollbox's children are
-           inherited from the binding parent -->
-      <method name="_getScrollableElements">
-        <body><![CDATA[
-          return document.getBindingParent(this).childNodes;
-        ]]></body>
-      </method>
-    </implementation>
-
-    <handlers>
-      <handler event="underflow"><![CDATA[
-         if (event.detail == 0)
-           return; // Ignore vertical events
-
-         var tabs = document.getBindingParent(this);
-         tabs.removeAttribute("overflow");
-      ]]></handler>
-      <handler event="overflow"><![CDATA[
-         if (event.detail == 0)
-           return; // Ignore vertical events
-
-         var tabs = document.getBindingParent(this);
-         tabs.setAttribute("overflow", "true");
-         this.scrollBoxObject.ensureElementIsVisible(tabs.selectedItem);
-      ]]></handler>
-    </handlers>
-  </binding>
-
-  <binding id="tabbrowser-tabs"
-           extends="chrome://global/content/bindings/tabbox.xml#tabs">
-    <content>
-      <xul:hbox xbl:inherits="overflow,flex" class="tabs-container">
-        <xul:arrowscrollbox anonid="arrowscrollbox" orient="horizontal" flex="1"
-                            style="min-width: 1px;" chromedir="&locale.dir;"
-#ifndef XP_MACOSX
-                            clicktoscroll="true"
-#endif
-                            class="tabbrowser-arrowscrollbox">
-# This is a hack to circumvent bug 472020, otherwise the tabs show up on the
-# right of the newtab button.
-          <children includes="tab"/>
-# This is to ensure anything extensions put here will go before the newtab
-# button, necessary due to the previous hack.
-          <children/>
-          <xul:toolbarbutton class="tabs-newtab-button"
-                             command="cmd_newtab" chromedir="&locale.dir;"
-                             tooltiptext="&newTabButton.tooltip;"/>
-        </xul:arrowscrollbox>
-        <xul:toolbarbutton class="tabs-newtab-button" anonid="newtab-button"
-                           command="cmd_newtab" chromedir="&locale.dir;"
-                           tooltiptext="&newTabButton.tooltip;"/>
-        <xul:toolbarbutton class="tabs-alltabs-button" type="menu" anonid="alltabs-button"
-                           tooltiptext="&listAllTabs.label;">
-          <xul:menupopup class="tabs-alltabs-popup" anonid="alltabs-popup"
-                         position="after_end"/>
-        </xul:toolbarbutton>
-        <xul:toolbarbutton anonid="tabs-closebutton"
-                           class="close-button tabs-closebutton"
-                           chromedir="&locale.dir;"
-                           tooltiptext="&closeTab.label;"/>
-      </xul:hbox>
-    </content>
-    <implementation implements="nsIDOMEventListener">
-      <constructor>
-        <![CDATA[
-          var pb2 = Services.prefs;
-          let tab = this.firstChild;
-          try {
-            this.mTabMinWidth = pb2.getIntPref("browser.tabs.tabMinWidth");
-            tab.minWidth = this.mTabMinWidth;
-          } catch (e) {
-          }
-          try {
-            this.mTabMaxWidth = pb2.getIntPref("browser.tabs.tabMaxWidth");
-            tab.maxWidth = this.mTabMaxWidth;
-          } catch (e) {
-          }
-          try {
-            this.mTabClipWidth = pb2.getIntPref("browser.tabs.tabClipWidth");
-          } catch (e) {
-          }
-          try {
-            this.mCloseButtons = pb2.getIntPref("browser.tabs.closeButtons");
-          } catch (e) {
-          }
-
-          pb2.addObserver("browser.tabs.closeButtons",
-                          this._prefObserver);
-
-          window.addEventListener("resize", this);
-#ifdef XP_MACOSX
-
-          if (!("WindowDraggingElement" in window))
-            ChromeUtils.import("resource://gre/modules/WindowDraggingUtils.jsm");
-          let draghandle = new WindowDraggingElement(this.arrowScrollbox, window);
-          draghandle.mouseDownCheck =
-            aEvent => aEvent.originalTarget.localName != "tab";
-#endif
-        ]]>
-      </constructor>
-
-      <destructor>
-        <![CDATA[
-          Services.prefs.removeObserver("browser.tabs.closeButtons",
-                                        this._prefObserver);
-        ]]>
-      </destructor>
-
-      <field name="arrowScrollboxWidth">0</field>
-
-      <field name="arrowScrollbox">
-        document.getAnonymousElementByAttribute(this, "anonid", "arrowscrollbox");
-      </field>
-
-      <field name="arrowScrollboxClosebutton">
-        document.getAnonymousElementByAttribute(this, "anonid", "tabs-closebutton");
-      </field>
-
-      <field name="_prefObserver">({
-        tabbox: this,
-
-        observe: function(subject, topic, data)
-        {
-          if (topic == "nsPref:changed") {
-            switch (data) {
-            case "browser.tabs.closeButtons":
-              subject.QueryInterface(Components.interfaces.nsIPrefBranch);
-              this.tabbox.mCloseButtons = subject.getIntPref("browser.tabs.closeButtons");
-              this.tabbox._updateCloseButtons();
-              break;
-            }
-          }
-        },
-
-        QueryInterface: function(aIID)
-        {
-          if (aIID.equals(Components.interfaces.nsIObserver) ||
-              aIID.equals(Components.interfaces.nsISupports))
-            return this;
-          throw Components.results.NS_NOINTERFACE;
-        }
-        });
-      </field>
-      <field name="mTabMinWidth">100</field>
-      <field name="mTabMaxWidth">250</field>
-      <field name="mTabClipWidth">140</field>
-      <field name="mCloseButtons">1</field>
-
-      <method name="addTab">
-        <body><![CDATA[
-          var tab = document.createElementNS(
-            "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-                                             "tab");
-          tab.setAttribute("crop", "end");
-          tab.maxWidth = this.mTabMaxWidth;
-          tab.minWidth = this.mTabMinWidth;
-          tab.width = 0;
-          tab.setAttribute("flex", "100");
-          tab.setAttribute("validate", "never");
-          tab.setAttribute("onerror", "this.removeAttribute('image');");
-          tab.className = "tabbrowser-tab";
-
-          this.appendChild(tab);
-
-          if (document.defaultView.getComputedStyle(this, "").direction == "rtl") {
-            /* In RTL UI, the tab is visually added to the left side of the
-             * tabstrip. This means the tabstip has to be scrolled back in
-             * order to make sure the same set of tabs is visible before and
-             * after the new tab is added */
-
-            this.arrowScrollbox.scrollBoxObject
-                .scrollBy(this.firstChild.boxObject.width, 0);
-          }
-
-          tab._tPos = this.childNodes.length - 1;
-          if (tab._tPos && tab.previousSibling.selected)
-            tab.setAttribute("afterselected", true);
-
-          // |setTimeout| here to ensure we're post reflow
-          var _delayedUpdate = function(aTabContainer) {
-            aTabContainer._updateCloseButtons();
-
-            if (aTabContainer.selectedItem != tab)
-              aTabContainer._notifyBackgroundTab(tab);
-
-            // XXXmano: this is a temporary workaround to bug 343585
-            // We need to manually update the scroll buttons disabled state
-            // if a tab was inserted to the overflow area or removed from it
-            // without any scrolling and when the tabbar has already
-            // overflowed.
-            aTabContainer.arrowScrollbox._updateScrollButtonsDisabledState();
-          }
-          setTimeout(_delayedUpdate, 0, this);
-
-          // Dispatch a new tab notification.  We do this once we're
-          // entirely done, so that things are in a consistent state
-          // even if the event listener opens or closes tabs.
-          var evt = document.createEvent("Events");
-          evt.initEvent("TabOpen", true, false);
-          tab.dispatchEvent(evt);
-
-          return tab;
-        ]]></body>
-      </method>
-
-      <method name="_updateCloseButtons">
-        <body><![CDATA[
-          // modes for tabstrip
-          // 0 - activetab  = close button on active tab only
-          // 1 - alltabs    = close buttons on all tabs
-          // 2 - noclose    = no close buttons at all
-          // 3 - closeatend = close button at the end of the tabstrip
-          switch (this.mCloseButtons) {
-          case 0:
-            this.setAttribute("closebuttons", "activetab");
-            break;
-          case 1:
-            var width = this.firstChild.boxObject.width;
-            // 0 width is an invalid value and indicates
-            // an item without display, so ignore.
-            if (width > this.mTabClipWidth || width == 0)
-              this.setAttribute("closebuttons", "alltabs");
-            else
-              this.setAttribute("closebuttons", "activetab");
-            break;
-          case 2:
-          case 3:
-            this.setAttribute("closebuttons", "noclose");
-            break;
-          }
-          this.arrowScrollboxClosebutton.collapsed = this.mCloseButtons != 3;
-        ]]></body>
-      </method>
-
-      <method name="_handleTabSelect">
-        <body><![CDATA[
-          this.arrowScrollbox.ensureElementIsVisible(this.selectedItem);
-        ]]></body>
-      </method>
-
-      <method name="_fillTrailingGap">
-        <body><![CDATA[
-          try {
-            // if we're at the right side (and not the logical end,
-            // which is why this works for both LTR and RTL)
-            // of the tabstrip, we need to ensure that we stay
-            // completely scrolled to the right side
-
-            var tabStrip = this.arrowScrollbox;
-            var scrollPos = {};
-            tabStrip.scrollBoxObject.getPosition(scrollPos, {});
-            var scrolledSize = {};
-            tabStrip.scrollBoxObject.getScrolledSize(scrolledSize, {});
-
-            if (scrollPos.value + tabStrip.boxObject.width >=
-                scrolledSize.value) {
-              tabStrip.scrollByPixels(-1);
-            }
-          } catch (e) { }
-        ]]></body>
-      </method>
-
-      <method name="handleEvent">
-        <parameter name="aEvent"/>
-        <body><![CDATA[
-          switch (aEvent.type) {
-            case "resize":
-              var width = this.arrowScrollbox.boxObject.width;
-              if (width != this.arrowScrollboxWidth) {
-                this._updateCloseButtons();
-                this._fillTrailingGap();
-                this._handleTabSelect();
-                this.arrowScrollboxWidth = width;
-              }
-              break;
-          }
-        ]]></body>
-      </method>
-
-      <field name="mAllTabsPopup">
-        document.getAnonymousElementByAttribute(this,
-                                                "anonid", "alltabs-popup");
-      </field>
-
-      <field name="_animateElement">
-        this.arrowScrollbox._scrollButtonDown;
-      </field>
-
-      <method name="_notifyBackgroundTab">
-        <parameter name="aTab"/>
-        <body><![CDATA[
-          var tsbo = this.arrowScrollbox.scrollBoxObject;
-          var tsboStart = tsbo.screenX;
-          var tsboEnd = tsboStart + tsbo.width;
-
-          var ctbo = aTab.boxObject;
-          var ctboStart = ctbo.screenX;
-          var ctboEnd = ctboStart + ctbo.width;
-
-          // Is the new tab already completely visible?
-          if (tsboStart <= ctboStart && ctboEnd <= tsboEnd)
-            return;
-
-          if (this.arrowScrollbox.smoothScroll) {
-            var selStart = this.selectedItem.boxObject.screenX;
-            var selEnd = selStart + this.selectedItem.boxObject.width;
-
-            // Can we make both the new tab and the selected tab completely visible?
-            if (Math.max(ctboEnd - selStart, selEnd - ctboStart) <= tsbo.width) {
-              this.arrowScrollbox.ensureElementIsVisible(aTab);
-              return;
-            }
-
-            this.arrowScrollbox._smoothScrollByPixels(this.arrowScrollbox._isLTRScrollbox ?
-                                                 selStart - tsboStart : selEnd - tsboEnd);
-          }
-
-          if (!this._animateElement.hasAttribute("notifybgtab")) {
-            this._animateElement.setAttribute("notifybgtab", "true");
-            setTimeout(function (ele) {
-              ele.removeAttribute("notifybgtab");
-            }, 150, this._animateElement);
-          }
-        ]]></body>
-      </method>
-    </implementation>
-    <handlers>
-      <handler event="select" action="this._handleTabSelect();"/>
-    </handlers>
-  </binding>
-
-  <!-- alltabs-popup binding
-       This binding relies on the structure of the tabbrowser binding.
-       Therefore it should only be used as a child of the tabs element.
-       This binding is exposed as a pseudo-public-API so themes can customize
-       the tabbar appearance without having to be scriptable
-       (see globalBindings.xml in Pinstripe for example).
-  -->
-
-  <binding id="tabbrowser-alltabs-popup"
-           extends="chrome://global/content/bindings/popup.xml#popup">
-    <implementation implements="nsIDOMEventListener">
-      <field name="_xulWindow">
-        null
-      </field>
-
-      <constructor><![CDATA[
-        // We cannot cache the XULBrowserWindow object itself since it might
-        // be set after this binding is constructed.
-        try {
-          this._xulWindow =
-            window.QueryInterface(Ci.nsIInterfaceRequestor)
-                  .getInterface(Ci.nsIWebNavigation)
-                  .QueryInterface(Ci.nsIDocShellTreeItem)
-                  .treeOwner
-                  .QueryInterface(Ci.nsIInterfaceRequestor)
-                  .getInterface(Ci.nsIXULWindow);
-        }
-        catch(ex) { }
-      ]]></constructor>
-
-      <method name="_menuItemOnCommand">
-        <parameter name="aEvent"/>
-
-        <body><![CDATA[
-          var tabcontainer = document.getBindingParent(this);
-          tabcontainer.selectedItem = aEvent.target.tab;
-        ]]></body>
-      </method>
-
-      <method name="_tabOnTabClose">
-        <parameter name="aEvent"/>
-
-        <body><![CDATA[
-          var menuItem = aEvent.target.mCorrespondingMenuitem;
-          if (menuItem)
-            menuItem.remove();
-        ]]></body>
-      </method>
-
-      <method name="handleEvent">
-        <parameter name="aEvent"/>
-        <body><![CDATA[
-          if (!aEvent.isTrusted)
-            return;
-
-          switch (aEvent.type) {
-            case "command":
-              this._menuItemOnCommand(aEvent);
-              break;
-            case "TabClose":
-              this._tabOnTabClose(aEvent);
-              break;
-            case "TabOpen":
-              this._createTabMenuItem(aEvent.originalTarget);
-              break;
-            case "scroll":
-              this._updateTabsVisibilityStatus();
-              break;
-          }
-        ]]></body>
-      </method>
-
-      <method name="_updateTabsVisibilityStatus">
-        <body><![CDATA[
-          var tabContainer = document.getBindingParent(this);
-          // We don't want menu item decoration unless there is overflow.
-          if (tabContainer.getAttribute("overflow") != "true")
-            return;
-
-          var tabstripBO = tabContainer.arrowScrollbox.scrollBoxObject;
-          for (var i = 0; i < this.childNodes.length; i++) {
-            var curTabBO = this.childNodes[i].tab.boxObject;
-            if (curTabBO.screenX >= tabstripBO.screenX &&
-                curTabBO.screenX + curTabBO.width <= tabstripBO.screenX + tabstripBO.width)
-              this.childNodes[i].setAttribute("tabIsVisible", "true");
-            else
-              this.childNodes[i].removeAttribute("tabIsVisible");
-          }
-        ]]></body>
-      </method>
-
-      <method name="_createTabMenuItem">
-        <parameter name="aTab"/>
-        <body><![CDATA[
-          var menuItem = document.createElementNS(
-            "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-            "menuitem");
-
-          menuItem.setAttribute("class", "menuitem-iconic alltabs-item");
-
-          menuItem.setAttribute("label", aTab.label);
-          menuItem.setAttribute("crop", aTab.getAttribute("crop"));
-          menuItem.setAttribute("image", aTab.getAttribute("image"));
-
-          ["typed", "typing", "status", "chat",
-           "attention", "unread", "prpl", "type"].forEach(function(aAttr) {
-            if (aTab.hasAttribute(aAttr))
-              menuItem.setAttribute(aAttr, aTab.getAttribute(aAttr));
-          });
-          if (aTab.selected)
-            menuItem.setAttribute("selected", "true");
-
-          // Keep some attributes of the menuitem in sync with its
-          // corresponding tab (e.g. the tab label)
-          aTab.mCorrespondingMenuitem = menuItem;
-          aTab.addEventListener("TabClose", this);
-          menuItem.tab = aTab;
-          menuItem.addEventListener("command", this);
-
-          this.appendChild(menuItem);
-          return menuItem;
-        ]]></body>
-      </method>
-    </implementation>
-
-    <handlers>
-      <handler event="popupshowing">
-      <![CDATA[
-        // set up the menu popup
-        var tabcontainer = document.getBindingParent(this);
-        var tabs = tabcontainer.childNodes;
-
-        // Listen for changes in the tab bar.
-        tabcontainer.addEventListener("TabOpen", this);
-        tabcontainer.arrowScrollbox.addEventListener("scroll", this);
-
-        for (var i = 0; i < tabs.length; i++) {
-          this._createTabMenuItem(tabs[i]);
-        }
-        this._updateTabsVisibilityStatus();
-      ]]></handler>
-
-      <handler event="popuphiding">
-      <![CDATA[
-        // clear out the menu popup and remove the listeners
-        while (this.hasChildNodes()) {
-          var menuItem = this.lastChild;
-          menuItem.removeEventListener("command", this);
-          menuItem.tab.removeEventListener("TabClose", this);
-          menuItem.tab.mCorrespondingMenuitem = null;
-          menuItem.remove();
-        }
-        var tabcontainer = document.getBindingParent(this);
-        tabcontainer.arrowScrollbox.removeEventListener("scroll", this);
-        tabcontainer.removeEventListener("TabOpen", this);
-        window.XULBrowserWindow.setOverLink("", null);
-      ]]></handler>
-
-      <handler event="DOMMenuItemActive">
-      <![CDATA[
-        if (!this._xulWindow || !this._xulWindow.XULBrowserWindow)
-          return;
-
-        var tab = event.target.tab;
-        if (tab)
-          this._xulWindow.XULBrowserWindow.setOverLink(tab.label, null);
-      ]]></handler>
-
-      <handler event="DOMMenuItemInactive">
-      <![CDATA[
-        if (!this._xulWindow || !this._xulWindow.XULBrowserWindow)
-          return;
-
-        this._xulWindow.XULBrowserWindow.setOverLink("", null);
-      ]]></handler>
-
-    </handlers>
-  </binding>
-
-  <!-- close-tab-button binding
-       This binding relies on the structure of the tabbrowser binding.
-       Therefore it should only be used as a child of the tab or the tabs
-       element (in both cases, when they are anonymous nodes of <tabbrowser>).
-       This binding is exposed as a pseudo-public-API so themes can customize
-       the tabbar appearance without having to be scriptable
-       (see globalBindings.xml in Pinstripe for example).
-  -->
-  <binding id="tabbrowser-close-tab-button"
-           extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
-    <handlers>
-      <handler event="click" button="0"><![CDATA[
-        var bindingParent = document.getBindingParent(this);
-        if (bindingParent) {
-          var tabbedBrowser = document.getBindingParent(bindingParent);
-          if (bindingParent.localName == "tab") {
-            /* The only sequence in which a second click event (i.e. dblclik)
-             * can be dispatched on an in-tab close button is when it is shown
-             * after the first click (i.e. the first click event was dispatched
-             * on the tab). This happens when we show the close button only on
-             * the active tab. (bug 352021)
-             * The only sequence in which a third click event can be dispatched
-             * on an in-tab close button is when the tab was opened with a
-             * double click on the tabbar. (bug 378344)
-             * In both cases, it is most likely that the close button area has
-             * been accidentally clicked, therefore we do not close the tab.
-             *
-             * We don't want to ignore processing of more than one click event,
-             * though, since the user might actually be repeatedly clicking to
-             * close many tabs at once.
-             */
-            if (event.detail > 1 && !this._ignoredClick) {
-              this._ignoredClick = true;
-              return;
-            }
-
-            // Reset the "ignored click" flag
-            this._ignoredClick = false;
-
-            tabbedBrowser.removeTab(bindingParent);
-            tabbedBrowser._blockDblClick = true;
-
-            /* XXXmano hack (see bug 343628):
-             * Since we're removing the event target, if the user
-             * double-clicks this button, the dblclick event will be dispatched
-             * with the tabbar as its event target (and explicit/originalTarget),
-             * which treats that as a mouse gesture for opening a new tab.
-             * In this context, we're manually blocking the dblclick event
-             * (see onTabBarDblClick).
-             */
-            var clickedOnce = false;
-            let enableDblClick = function (event) {
-              if (event.detail == 1 && !clickedOnce) {
-                clickedOnce = true;
-                return;
-              }
-              setTimeout(function() {
-                tabbedBrowser._blockDblClick = false;
-              }, 0);
-              tabbedBrowser.removeEventListener("click", enableDblClick);
-            };
-            tabbedBrowser.addEventListener("click", enableDblClick);
-          }
-          else // "tabs"
-            tabbedBrowser.removeCurrentTab();
-        }
-      ]]></handler>
-      <handler event="dblclick" button="0" phase="capturing">
-        // for the one-close-button case
-        event.stopPropagation();
-      </handler>
-    </handlers>
-  </binding>
-
-  <binding id="tabbrowser-tab" display="xul:hbox"
-           extends="chrome://global/content/bindings/tabbox.xml#tab">
-    <content chromedir="&locale.dir;">
-      <xul:stack mousethrough="always" class="tab-stack" flex="1">
-        <xul:hbox xbl:inherits="selected" class="tab-background">
-          <xul:hbox xbl:inherits="selected" class="tab-background-start"/>
-          <xul:hbox xbl:inherits="selected" class="tab-background-middle"/>
-          <xul:hbox xbl:inherits="selected" class="tab-background-end"/>
-        </xul:hbox>
-        <xul:hbox mousethrough="always" xbl:inherits="selected" class="tab-content" align="center">
-          <xul:image mousethrough="always" xbl:inherits="selected,validate,src=image" class="tab-icon-image"/>
-          <xul:label mousethrough="always" flex="1" xbl:inherits="value=label,crop,accesskey" class="tab-text"/>
-          <xul:toolbarbutton anonid="close-button" mousethrough="never" tabindex="-1" class="tab-close-button" tooltiptext="&closeTab.label;"/>
-        </xul:hbox>
-      </xul:stack>
-    </content>
-
-    <implementation>
-      <field name="mOverCloseButton">false</field>
-      <field name="mCorrespondingMenuitem">null</field>
-
-      <constructor><![CDATA[
-        const kAttrs = ["label", "tooltip", "selected", "crop", "typing",
-                        "typed", "unread", "attention", "status", "chat",
-                        "image", "prpl"];
-        new MutationObserver(function(aMutations) {
-          for (let mutation of aMutations) {
-            let attr = mutation.attributeName;
-
-            if (attr == "label") {
-              if (window.getTabBrowser)
-                getTabBrowser().updateTitlebar();
-              // Update our tooltiptext, but only if a tooltip hasn't been set.
-              if (!this.hasAttribute("tooltip"))
-                this.setAttribute("tooltiptext", this.getAttribute(attr));
-            }
-            else if (attr == "tooltip") {
-              if (this.hasAttribute(attr)) {
-                // Tooltip was added. Stop using our label as tooltiptext.
-                this.removeAttribute("tooltiptext");
-              }
-              else {
-                // Tooltip was removed. Switch to using our label as tooltiptext.
-                this.setAttribute("tooltiptext", this.getAttribute("label"));
-              }
-            }
-            else if (attr == "selected") {
-              if (this.hasAttribute(attr))
-                this.linkedTabPanel.setAttribute(attr, this.getAttribute(attr));
-              else {
-                this.linkedTabPanel.removeAttribute(attr);
-                if (this.linkedTabPanel.switchingAwayFromPanel)
-                  this.linkedTabPanel.switchingAwayFromPanel();
-              }
-            }
-
-            // Update the item in the all tabs menu if it's currently shown.
-            let menuitem = this.mCorrespondingMenuitem;
-            if (menuitem && attr != "tooltip") {
-              if (this.hasAttribute(attr))
-                menuitem.setAttribute(attr, this.getAttribute(attr));
-              else
-                menuitem.removeAttribute(attr);
-            }
-          }
-        }.bind(this)).observe(this, {attributes: true,
-                                     attributeFilter: kAttrs});
-      ]]></constructor>
-    </implementation>
-
-    <handlers>
-      <handler event="mouseover">
-        var anonid = event.originalTarget.getAttribute("anonid");
-        if (anonid == "close-button")
-          this.mOverCloseButton = true;
-      </handler>
-      <handler event="mouseout">
-        var anonid = event.originalTarget.getAttribute("anonid");
-        if (anonid == "close-button")
-          this.mOverCloseButton = false;
-      </handler>
-      <handler event="dragstart" phase="capturing">
-        this.style.MozUserFocus = '';
-      </handler>
-      <handler event="mousedown" button="0" phase="capturing">
-      <![CDATA[
-        if (this.mOverCloseButton) {
-          event.stopPropagation();
-        }
-        else {
-          // If this tab is not currently selected, call the onSelect method of
-          // the current tab to mark the conversation as read before leaving it.
-          // This is necessary when Instantbird (and therefore the current tab)
-          // did not have focus before this click.
-          if (!this.linkedTabPanel.hasAttribute("selected")) {
-            let panel = document.getBindingParent(this).selectedPanel;
-            if ("onSelect" in panel)
-              panel.onSelect();
-          }
-
-          this.style.MozUserFocus = 'ignore';
-          this.clientTop; // just using this to flush style updates
-        }
-      ]]>
-      </handler>
-      <handler event="mousedown" button="1">
-        this.style.MozUserFocus = 'ignore';
-        this.clientTop;
-      </handler>
-      <handler event="mousedown" button="2">
-        this.style.MozUserFocus = 'ignore';
-        this.clientTop;
-      </handler>
-      <handler event="mouseup">
-        this.style.MozUserFocus = '';
-      </handler>
-    </handlers>
-  </binding>
-
-</bindings>
deleted file mode 100644
--- a/im/content/utilities.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource:///modules/imServices.jsm");
-
-function* getIter(aEnumerator)
-{
-  while (aEnumerator.hasMoreElements())
-    yield aEnumerator.getNext();
-}
deleted file mode 100644
--- a/im/content/viewlog.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#findbar .findbar-closebutton {
-  display: none;
-}
-
-tooltip[type="im"] {
-  -moz-binding: url("chrome://chat/content/imtooltip.xml#tooltip");
-}
deleted file mode 100644
--- a/im/content/viewlog.js
+++ /dev/null
@@ -1,363 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-// viewZoomOverlay.js and macgestures.js use this.
-function getBrowser() {
-  let deck = document.getElementById("browserDeck");
-  let id = (parseInt(deck.selectedIndex, 10) ? "conv" : "text") + "-browser";
-  let browser = document.getElementById(id);
-  browser.selectedBrowser = browser; // for macgestures.js
-  return browser;
-}
-
-var logWindow = {
-  load: function lw_load() {
-    let displayname = window.arguments[1];
-    if (displayname) {
-      let bundle = document.getElementById("bundle_instantbird");
-      document.title = bundle.getFormattedString("logs", [displayname]) +
-        document.documentElement.getAttribute("titlemenuseparator") +
-        document.documentElement.getAttribute("titlemodifier");
-    }
-
-    // Prevent closing the findbar, go back to logTree instead.
-    let findbar = document.getElementById("findbar");
-    let logTree = document.getElementById("logTree");
-    findbar.close = () => logTree.focus();
-    // Ensure the findbar has something to look at.
-    let browser = document.getElementById("text-browser");
-    findbar.browser = browser;
-    findbar.open(); // Requires findbar.browser to be set
-
-    document.getElementById("text-browser")
-            .addEventListener("DOMContentLoaded", logWindow.contentLoaded, true);
-    document.getElementById("conv-browser").progressBar =
-      document.getElementById("browserProgress");
-
-    logTree.focus();
-    let treeView = logWindow._treeView =
-                   new chatLogTreeView(logTree, window.arguments[0].logs);
-    // Select the first line.
-    let selectIndex = 0;
-    if (treeView.isContainer(selectIndex)) {
-      // If the first line is a group, open it and select the
-      // next line instead.
-      treeView.toggleOpenState(selectIndex++);
-    }
-    logTree.view.selection.select(selectIndex);
-
-    // If the log viewer window already existed, it may be hidden, so bring
-    // the window to the front.
-    window.focus();
-  },
-
-  pendingLoad: false,
-  onselect: function lw_onselect() {
-    let selection = this._treeView.selection;
-    let currentIndex = selection.currentIndex;
-    // The current (focused) row may not be actually selected...
-    if (!selection.isSelected(currentIndex))
-      return;
-
-    let log = this._treeView._rowMap[currentIndex].log;
-    if (!log)
-      return;
-    if (this._displayedLog && this._displayedLog == log.path)
-      return;
-    this._displayedLog = log.path;
-
-    let deck = document.getElementById("browserDeck");
-    let findbar = document.getElementById("findbar");
-    if (log.format == "json") {
-      log.getConversation().then((aConv) => {
-        if (!aConv) {
-          // Empty or completely broken json log file.
-          deck.selectedIndex = 2;
-          // Ensure the findbar looks at an empty file.
-          let browser = document.getElementById("text-browser");
-          findbar.browser = browser;
-          browser.loadURI("about:blank");
-          return;
-        }
-        deck.selectedIndex = 1;
-        let browser = document.getElementById("conv-browser");
-        findbar.browser = browser;
-        FullZoom.applyPrefValue();
-        if (this.pendingLoad) {
-          browser._conv = aConv;
-          return;
-        }
-        browser.init(aConv);
-        this.pendingLoad = true;
-        Services.obs.addObserver(this, "conversation-loaded");
-      });
-    }
-    else {
-      // Legacy text log.
-      deck.selectedIndex = 0;
-      let browser = document.getElementById("text-browser");
-      findbar.browser = browser;
-      FullZoom.applyPrefValue();
-      browser.docShell.forcedCharset = "UTF-8";
-      let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
-      file.initWithPath(log.path);
-      browser.loadURI(Services.io.newFileURI(file).spec);
-    }
-  },
-
-  _colorCache: {},
-  // Duplicated code from conversation.xml :-(
-  _computeColor: function(aName) {
-    if (Object.prototype.hasOwnProperty.call(this._colorCache, aName))
-      return this._colorCache[aName];
-
-    // Compute the color based on the nick
-    var nick = aName.match(/[a-zA-Z0-9]+/);
-    nick = nick ? nick[0].toLowerCase() : nick = aName;
-    var weight = 10;
-    var res = 0;
-    for (var i = 0; i < nick.length; ++i) {
-      var char = nick.charCodeAt(i) - 47;
-      if (char > 10)
-        char -= 39;
-      // now char contains a value between 1 and 36
-      res += char * weight;
-           weight *= 0.52; //arbitrary
-    }
-    return (this._colorCache[aName] = Math.round(res) % 360);
-  },
-  observe: function(aSubject, aTopic, aData) {
-    let browser = document.getElementById("conv-browser");
-    if (aTopic != "conversation-loaded" || aSubject != browser)
-      return;
-    browser._autoScrollEnabled = false;
-    browser.contentDocument.getElementById("ibcontent").classList.add("log");
-
-    let count = {};
-    let messages = browser._conv.getMessagesEnumerator(count);
-    browser.getPendingMessagesCount = () => count.value;
-    browser.getNextPendingMessage = function() {
-      if (!messages.hasMoreElements()) {
-        delete browser.getNextPendingMessage;
-        return null;
-      }
-
-      let msg = messages.getNext();
-      if (!msg.system && browser._conv.isChat)
-        msg.color = "color: hsl(" + logWindow._computeColor(msg.who) + ", 100%, 40%);";
-      return {msg: msg, context: false, firstUnread: false};
-    };
-    browser.delayedDisplayPendingMessages();
-    delete this.pendingLoad;
-    Services.obs.removeObserver(this, "conversation-loaded");
-  },
-
-  contentLoaded: function lw_contentLoaded() {
-    let browser = document.getElementById("text-browser");
-    if (browser.currentURI.spec == "about:blank")
-      return;
-    let doc = browser.contentDocument;
-    let link = doc.createElement("link");
-    link.type = "text/css";
-    link.rel = "stylesheet";
-    link.href = "data:text/css,pre{white-space: pre-wrap;word-wrap: break-word;}.ib-img-smile {vertical-align: text-bottom;}";
-    doc.getElementsByTagName("head")[0].appendChild(link);
-
-    let elt = doc.getElementsByTagName("pre")[0].firstChild;
-    if (!elt) {
-      // Text log file is empty.
-      document.getElementById("browserDeck").selectedIndex = 2;
-      return;
-    }
-    if (!("smileTextNode" in window))
-      ChromeUtils.import("resource:///modules/imSmileys.jsm");
-    smileTextNode(elt);
-  }
-};
-
-function chatLogTreeGroupItem(aTitle, aLogItems) {
-  this._title = aTitle;
-  this._children = aLogItems;
-  for (let child of this._children)
-    child._parent = this;
-  this._open = false;
-}
-chatLogTreeGroupItem.prototype = {
-  getText: function() { return this._title; },
-  get id() { return this._title; },
-  get open() { return this._open; },
-  get level() { return 0; },
-  get _parent() { return null; },
-  get children() { return this._children; },
-  getProperties: () => ""
-};
-
-function chatLogTreeLogItem(aLog, aText, aLevel) {
-  this.log = aLog;
-  this._text = aText;
-  this._level = aLevel;
-}
-chatLogTreeLogItem.prototype = {
-  getText: function() { return this._text; },
-  get id() { return this.log.title; },
-  get open() { return false; },
-  get level() { return this._level; },
-  get children() { return []; },
-  getProperties: () => ""
-};
-
-function chatLogTreeView(aTree, aLogs) {
-  this._tree = aTree;
-  this._logs = aLogs;
-  this._tree.view = this;
-  this._rebuild();
-}
-chatLogTreeView.prototype = {
-  __proto__: new PROTO_TREE_VIEW(),
-
-  _rebuild: function cLTV__rebuild() {
-    // Some date helpers...
-    const kDayInMsecs = 24 * 60 * 60 * 1000;
-    const kWeekInMsecs = 7 * kDayInMsecs;
-    const kTwoWeeksInMsecs = 2 * kWeekInMsecs;
-
-    // Drop the old rowMap.
-    if (this._tree)
-      this._tree.rowCountChanged(0, -this._rowMap.length);
-    this._rowMap = [];
-
-    // Used to show the dates in the log list in the locale of the application.
-    let chatBundle = document.getElementById("bundle_instantbird");
-    let dateFormatBundle = document.getElementById("bundle_dateformat");
-    let placesBundle = document.getElementById("bundle_places");
-    const dateFormatter = new Services.intl.DateTimeFormat(undefined,
-      { dateStyle: "short" });
-    const dateTimeFormatter = new Services.intl.DateTimeFormat(undefined, {
-      dateStyle: "short", timeStyle: "short"
-    });
-    let formatDate = function(aDate) {
-      return dateFormatter.format(aDate);
-    };
-    let formatDateTime = function(aDate) {
-      return dateTimeFormatter.format(aDate);
-    };
-    let formatMonthYear = function(aDate) {
-      let month = formatMonth(aDate);
-      return dateFormatBundle.getFormattedString("finduri-MonthYear",
-                                                 [month, aDate.getFullYear()]);
-    };
-    let formatMonth = aDate =>
-      dateFormatBundle.getString("month." + (aDate.getMonth() + 1) + ".name");
-    let formatWeekday = aDate =>
-      dateFormatBundle.getString("day." + (aDate.getDay() + 1) + ".name");
-
-    let nowDate = new Date();
-    let todayDate = new Date(nowDate.getFullYear(), nowDate.getMonth(),
-                             nowDate.getDate());
-
-    // The keys used in the 'firstgroups' object should match string ids.
-    // The order is the reverse of that in which they will appear
-    // in the logTree.
-    let firstgroups = {
-      previousWeek: [],
-      currentWeek: [],
-      yesterday: [],
-      today: []
-    };
-
-    // today and yesterday are treated differently, because for JSON logs they
-    // represent individual logs, and are not "groups".
-    let today = null, yesterday = null;
-
-    // Build a chatLogTreeLogItem for each log, and put it in the right group.
-    let groups = {};
-    for (let log of getIter(this._logs)) {
-      let logDate = new Date(log.time * 1000);
-      // Calculate elapsed time between the log and 00:00:00 today.
-      let timeFromToday = todayDate - logDate;
-      let isJSON = log.format == "json";
-      let title = (isJSON ? formatDate : formatDateTime)(logDate);
-      let group;
-      if (timeFromToday <= 0) {
-        if (isJSON) {
-          today = new chatLogTreeLogItem(log, chatBundle.getString("log.today"), 0);
-          continue;
-        }
-        group = firstgroups.today;
-      }
-      else if (timeFromToday <= kDayInMsecs) {
-        if (isJSON) {
-          yesterday = new chatLogTreeLogItem(log, chatBundle.getString("log.yesterday"), 0);
-          continue;
-        }
-        group = firstgroups.yesterday;
-      }
-      // Note that the 7 days of the current week include today.
-      else if (timeFromToday <= kWeekInMsecs - kDayInMsecs) {
-        group = firstgroups.currentWeek;
-        if (isJSON)
-          title = formatWeekday(logDate);
-      }
-      else if (timeFromToday <= kTwoWeeksInMsecs - kDayInMsecs)
-        group = firstgroups.previousWeek;
-      else {
-        logDate.setHours(0);
-        logDate.setMinutes(0);
-        logDate.setSeconds(0);
-        logDate.setDate(1);
-        let groupID = logDate.toISOString();
-        if (!(groupID in groups)) {
-          let groupname;
-          if (logDate.getFullYear() == nowDate.getFullYear()) {
-            if (logDate.getMonth() == nowDate.getMonth())
-              groupname = placesBundle.getString("finduri-AgeInMonths-is-0");
-            else
-              groupname = formatMonth(logDate);
-          }
-          else
-            groupname = formatMonthYear(logDate);
-          groups[groupID] = {
-            entries: [],
-            name: groupname
-          };
-        }
-        group = groups[groupID].entries;
-      }
-      group.push(new chatLogTreeLogItem(log, title, 1));
-    }
-
-    let groupIDs = Object.keys(groups).sort().reverse();
-
-    // Add firstgroups to groups and groupIDs.
-    for (let groupID in firstgroups) {
-      let group = firstgroups[groupID];
-      if (!group.length)
-        continue;
-      groupIDs.unshift(groupID);
-      groups[groupID] = {
-        entries: firstgroups[groupID],
-        name: chatBundle.getString("log." + groupID)
-      };
-    }
-
-    // Build tree.
-    if (today)
-      this._rowMap.push(today);
-    if (yesterday)
-      this._rowMap.push(yesterday);
-    groupIDs.forEach(function (aGroupID) {
-      let group = groups[aGroupID];
-      group.entries.sort((l1, l2) => l2.log.time - l1.log.time);
-      this._rowMap.push(new chatLogTreeGroupItem(group.name, group.entries));
-    }, this);
-
-    // Finally, notify the tree.
-    if (this._tree)
-      this._tree.rowCountChanged(0, this._rowMap.length);
-  }
-};
-
-this.addEventListener("load", logWindow.load);
deleted file mode 100644
--- a/im/content/viewlog.xul
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/skin/viewlog.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/viewlog.css" type="text/css"?>
-<?xml-stylesheet href="chrome://instantbird/content/instantbird.css" type="text/css"?>
-
-<?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://instantbird/content/menus.xul"?>
-#endif
-
-<!DOCTYPE window [
-  <!ENTITY % instantbirdDTD SYSTEM "chrome://instantbird/locale/instantbird.dtd">
-  %instantbirdDTD;
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  %brandDTD;
-  <!ENTITY % textcontextDTD SYSTEM "chrome://global/locale/textcontext.dtd">
-  %textcontextDTD;
-]>
-
-<window
-  id     = "logWindow"
-  windowtype="Messenger:logs"
-  title  = "&logsWindow.title;"
-  titlemenuseparator="&logsWindow.titlemodifiermenuseparator;"
-  titlemodifier="&logsWindow.titlemodifier;"
-  width  = "650"
-  height = "600"
-  persist= "width height screenX screenY"
-  xmlns  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://instantbird/content/utilities.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/jsTreeView.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/viewlog.js"/>
-#ifdef XP_MACOSX
-  <script type="application/javascript" src="chrome://instantbird/content/macgestures.js"/>
-#else
-  <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
-#endif
-  <script type="application/javascript" src="chrome://global/content/viewZoomOverlay.js"/>
-  <script type="application/javascript" src="chrome://instantbird/content/convZoom.js"/>
-
-#ifdef XP_MACOSX
-#include menus.xul.inc
-#endif
-
-  <commandset id="logsCommands">
-    <command id="cmd_close" oncommand="window.close();"/>
-    <command id="cmd_textZoomReduce" oncommand="FullZoom.reduce();"/>
-    <command id="cmd_textZoomEnlarge" oncommand="FullZoom.enlarge();"/>
-    <command id="cmd_textZoomReset" oncommand="FullZoom.reset();"/>
-    <command id="cmd_find"
-             oncommand="document.getElementById('findbar').onFindCommand();"/>
-    <command id="cmd_findAgain"
-             oncommand="document.getElementById('findbar').onFindAgainCommand(false);"/>
-    <command id="cmd_findPrevious"
-             oncommand="document.getElementById('findbar').onFindAgainCommand(true);"/>
-
-    <commandset id="editMenuCommands"/>
-  </commandset>
-
-  <keyset id="logsKeys">
-    <key id="key_close" key="w" modifiers="accel" command="cmd_close"/>
-    <key id="key_close2" keycode="VK_ESCAPE" command="cmd_close"/>
-    <key id="key_textZoomEnlarge" key="&textEnlarge.commandkey;" command="cmd_textZoomEnlarge" modifiers="accel"/>
-    <key id="key_textZoomEnlarge2" key="&textEnlarge.commandkey2;" command="cmd_textZoomEnlarge" modifiers="accel"/>
-    <key id="key_textZoomEnlarge3" key="&textEnlarge.commandkey3;" command="cmd_textZoomEnlarge" modifiers="accel"/>
-    <key id="key_textZoomReduce"  key="&textReduce.commandkey;" command="cmd_textZoomReduce" modifiers="accel"/>
-    <key id="key_textZoomReduce2"  key="&textReduce.commandkey2;" command="cmd_textZoomReduce" modifiers="accel"/>
-    <key id="key_textZoomReset" key="&textReset.commandkey;" command="cmd_textZoomReset" modifiers="accel"/>
-    <key id="key_textZoomReset2" key="&textReset.commandkey2;" command="cmd_textZoomReset" modifiers="accel"/>
-    <key id="key_find" key="&findOnCmd.commandkey;" command="cmd_find" modifiers="accel"/>
-    <key id="key_findAgain" key="&findAgainCmd.commandkey;" command="cmd_findAgain" modifiers="accel"/>
-    <key id="key_findPrevious" key="&findAgainCmd.commandkey;" command="cmd_findPrevious" modifiers="accel,shift"/>
-    <key keycode="&findAgainCmd.commandkey2;" command="cmd_findAgain"/>
-    <key keycode="&findAgainCmd.commandkey2;"  command="cmd_findPrevious" modifiers="shift"/>
-  </keyset>
-
-  <stringbundleset id="stringbundleset">
-    <stringbundle id="bundle_instantbird" src="chrome://instantbird/locale/instantbird.properties"/>
-    <stringbundle id="bundle_dateformat" src="chrome://chat/locale/dateFormat.properties"/>
-    <stringbundle id="bundle_places" src="chrome://places/locale/places.properties"/>
-  </stringbundleset>
-
-  <popupset id="mainPopupSet">
-    <tooltip id="imTooltip" type="im"/>
-    <menupopup id="contentAreaContextMenu">
-      <menuitem id="context-copy"
-                label="&copyCmd.label;"
-                accesskey="&copyCmd.accesskey;"
-                command="cmd_copy"/>
-      <menuitem id="context-selectall"
-                label="&selectAllCmd.label;"
-                accesskey="&selectAllCmd.accesskey;"
-                command="cmd_selectAll"/>
-    </menupopup>
-  </popupset>
-
-  <hbox flex="1">
-    <tree id="logTree" width="160" hidecolumnpicker="true"
-          seltype="single" context="logTreeContext"
-          onselect="logWindow.onselect();">
-      <treecols>
-        <treecol id="logCol" flex="1" primary="true" hideheader="true"
-                 crop="center" ignoreincolumnpicker="true"/>
-      </treecols>
-      <treechildren/>
-    </tree>
-    <splitter/>
-    <vbox flex="1">
-      <deck flex="1" id="browserDeck" selectedIndex="0">
-        <browser id="text-browser" type="content"
-                 context="contentAreaContextMenu" tooltip="imTooltip"
-                 disablehistory="true" src="about:blank" flex="1"/>
-        <vbox flex="1">
-          <browser id="conv-browser" type="content" browser-type="conversation" flex="1"
-                   context="contentAreaContextMenu" tooltip="imTooltip"/>
-          <progressmeter id="browserProgress" hidden="true"/>
-        </vbox>
-        <vbox flex="1" id="corruptLogScreen" align="center" pack="center">
-          <hbox id="corruptLogBox">
-            <vbox id="corruptLogInnerBox" align="center" pack="center" flex="1">
-              <description id="corruptLogDesc">&logsWindow.corruptlogfile;</description>
-            </vbox>
-          </hbox>
-        </vbox>
-      </deck>
-      <findbar id="findbar"/>
-    </vbox>
-  </hbox>
-
-</window>
deleted file mode 100644
--- a/im/installer/Makefile.in
+++ /dev/null
@@ -1,183 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-STANDALONE_MAKEFILE := 1
-
-include $(moztopsrcdir)/config/rules.mk
-
-MOZ_PKG_REMOVALS = $(srcdir)/removed-files.in
-
-MOZ_PKG_MANIFEST = $(srcdir)/package-manifest.in
-# Some files have been already bundled with xulrunner
-ifndef SYSTEM_LIBXUL
-MOZ_PKG_FATAL_WARNINGS = 1
-endif
-
-DEFINES += -DPKG_LOCALE_MANIFEST=$(topobjdir)/im/installer/locale-manifest.in
-MOZ_CHROME_LOCALE_ENTRIES=@RESPATH@/chrome/
-
-MOZ_PKG_DUPEFLAGS = \
-	-f $(srcdir)/allowed-dupes.mn \
-	-f $(commtopsrcdir)/mail/installer/allowed-dupes.mn \
-	-f $(moztopsrcdir)/browser/installer/allowed-dupes.mn \
-	$(NULL)
-
-MOZ_NONLOCALIZED_PKG_LIST = \
-	xpcom \
-	im \
-	$(NULL)
-
-MOZ_LOCALIZED_PKG_LIST = $(AB_CD)
-
-DEFINES += -DMOZ_APP_NAME=$(MOZ_APP_NAME) -DPREF_DIR=$(PREF_DIR)
-
-ifdef MOZ_DEBUG
-DEFINES += -DMOZ_DEBUG=1
-endif
-
-ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
-DEFINES += -DMOZ_GTK=1
-ifeq ($(MOZ_WIDGET_TOOLKIT),gtk3)
-DEFINES += -DMOZ_GTK3=1
-endif
-endif
-
-ifdef _MSC_VER
-DEFINES += -D_MSC_VER=$(_MSC_VER)
-endif
-
-ifdef MOZ_SYSTEM_NSPR
-DEFINES += -DMOZ_SYSTEM_NSPR=1
-endif
-
-ifdef MOZ_SYSTEM_NSS
-DEFINES += -DMOZ_SYSTEM_NSS=1
-endif
-
-ifdef NSS_DISABLE_DBM
-DEFINES += -DNSS_DISABLE_DBM=1
-endif
-
-DEFINES += -DJAREXT=
-
-ifdef MOZ_ANGLE_RENDERER
-DEFINES += -DMOZ_ANGLE_RENDERER=$(MOZ_ANGLE_RENDERER)
-ifdef MOZ_D3DCOMPILER_VISTA_DLL
-DEFINES += -DMOZ_D3DCOMPILER_VISTA_DLL=$(MOZ_D3DCOMPILER_VISTA_DLL)
-endif
-endif
-
-ifdef MOZ_UPDATER
-DEFINES += -DMOZ_UPDATER=1
-endif
-
-DEFINES += -DMOZ_CHILD_PROCESS_NAME=$(MOZ_CHILD_PROCESS_NAME)
-
-# Set MSVC dlls version to package, if any.
-ifdef MOZ_NO_DEBUG_RTL
-ifdef WIN32_REDIST_DIR
-DEFINES += -DMOZ_PACKAGE_MSVC_DLLS=1
-DEFINES += -DMSVC_C_RUNTIME_DLL=$(MSVC_C_RUNTIME_DLL)
-DEFINES += -DMSVC_CXX_RUNTIME_DLL=$(MSVC_CXX_RUNTIME_DLL)
-endif
-ifdef WIN_UCRT_REDIST_DIR
-DEFINES += -DMOZ_PACKAGE_WIN_UCRT_DLLS=1
-endif
-endif
-
-ifneq (,$(filter WINNT Darwin Android,$(OS_TARGET)))
-DEFINES += -DMOZ_SHARED_MOZGLUE=1
-endif
-
-ifdef NECKO_WIFI
-DEFINES += -DNECKO_WIFI
-endif
-
-ifdef MOZ_PURPLE
-DEFINES += -DMOZ_PURPLE
-endif
-
-ifdef MAKENSISU
-DEFINES += -DHAVE_MAKENSISU=1
-endif
-
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-MOZ_PKG_MAC_DSSTORE=branding/dsstore
-MOZ_PKG_MAC_BACKGROUND=branding/background.png
-MOZ_PKG_MAC_ICON=branding/disk.icns
-MOZ_PKG_MAC_EXTRA=--symlink "/Applications:/ "
-endif
-
-NON_OMNIJAR_FILES =
-
-GENERATE_CACHE=1
-
-include $(moztopsrcdir)/toolkit/mozapps/installer/signing.mk
-include $(moztopsrcdir)/toolkit/mozapps/installer/packager.mk
-
-ifeq (bundle, $(MOZ_FS_LAYOUT))
-BINPATH = $(_BINPATH)
-DEFINES += -DAPPNAME=$(_APPNAME)
-else
-# Every other platform just winds up in dist/bin
-BINPATH = bin
-endif
-DEFINES += -DBINPATH=$(BINPATH)
-
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-RESPATH = $(_APPNAME)/Contents/Resources
-else
-RESPATH = $(BINPATH)
-endif
-DEFINES += -DRESPATH=$(RESPATH)
-
-LPROJ_ROOT = $(firstword $(subst -, ,$(AB_CD)))
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-ifeq (zh-TW,$(AB_CD))
-LPROJ_ROOT := $(subst -,_,$(AB_CD))
-endif
-endif
-DEFINES += -DLPROJ_ROOT=$(LPROJ_ROOT)
-
-ifdef MOZ_SYSTEM_ICU
-DEFINES += -DMOZ_SYSTEM_ICU
-endif
-
-ifdef CLANG_CXX
-DEFINES += -DCLANG_CXX
-endif
-ifdef CLANG_CL
-DEFINES += -DCLANG_CL
-endif
-
-libs::
-	$(MAKE) -C $(DEPTH)/im/locales langpack
-
-ifeq (WINNT,$(OS_ARCH))
-PKGCOMP_FIND_OPTS =
-else
-PKGCOMP_FIND_OPTS = -L
-endif
-ifeq (Darwin, $(OS_ARCH))
-FINDPATH = $(_APPNAME)/Contents/MacOS
-else
-FINDPATH=bin
-endif
-
-package-compare:: $(MOZ_PKG_MANIFEST)
-	cd $(DIST); find $(PKGCOMP_FIND_OPTS) $(FINDPATH) -type f | sort > bin-list.txt
-	$(call py_action,preprocessor,$(DEFINES) $(ACDEFINES) $(MOZ_PKG_MANIFEST)) | grep '^$(BINPATH)' | sed -e 's/^\///' | sort > $(DIST)/pack-list.txt
-	-diff -u $(DIST)/pack-list.txt $(DIST)/bin-list.txt
-	rm -f $(DIST)/pack-list.txt $(DIST)/bin-list.txt
-
-installer::
-ifdef INSTALLER_DIR
-	$(MAKE) -C $(INSTALLER_DIR)
-endif
-
-# The comm-* source stamp is already there.
-PLATFORM_SOURCE_STAMP = $(firstword $(shell hg -R "$(moztopsrcdir)" parent --template="{node}\n" 2>/dev/null))
-PLATFORM_SOURCE_REPO = $(shell hg -R "$(moztopsrcdir)" showconfig paths.default 2>/dev/null | sed -e "s/^ssh:/https:/")
-make-sourcestamp-file::
-	@echo "$(PLATFORM_SOURCE_REPO)/rev/$(PLATFORM_SOURCE_STAMP)" >> $(MOZ_SOURCESTAMP_FILE)
deleted file mode 100644
--- a/im/installer/allowed-dupes.mn
+++ /dev/null
@@ -1,20 +0,0 @@
-# Known duplicate files
-# This file is ideally removed, but some existing files will be grandfathered in
-# See bug 1303184, bug 1313670
-#
-# PLEASE DO NOT ADD MORE EXCEPTIONS TO THIS LIST
-#
-
-# im
-chrome/instantbird/skin/classic/instantbird/messages/simple/Variants/Normal.css
-chrome/instantbird/skin/classic/instantbird/messages/simple/Incoming/Context.html
-chrome/instantbird/skin/classic/instantbird/messages/simple/Incoming/NextContext.html
-chrome/chat/content/chat/conv.html
-chrome/icons/default/default16.png
-icons/default16.png
-
-# Variants of paths in mozilla/browser/installer/allowed-dupes.mn
-# and mail/installer/allowed-dupes.mn:
-# bug 658850
-@MOZ_APP_NAME@
-@MOZ_APP_NAME@-bin
deleted file mode 100644
--- a/im/installer/moz.build
+++ /dev/null
@@ -1,4 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
deleted file mode 100644
--- a/im/installer/package-manifest.in
+++ /dev/null
@@ -1,733 +0,0 @@
-; This Source Code Form is subject to the terms of the Mozilla Public
-; License, v. 2.0. If a copy of the MPL was not distributed with this
-; file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-; Package file for the Instantbird build.
-;
-; Packaging manifest is used to copy files from dist/bin
-; to the staging directory.
-; Some other files are built in the staging directory directly,
-; so they will be implicitly packaged too.
-;
-; File format:
-;
-; [] designates a toplevel component. Example: [xpcom]
-; * wildcard
-; ; file comment
-;
-
-; Due to Apple Mac OS X packaging requirements, files that are in the same
-; directory on other platforms must be located in different directories on
-; Mac OS X. The following defines allow specifying the Mac OS X bundle
-; location which also work on other platforms.
-;
-; @BINPATH@
-; Equals Contents/MacOS/ on Mac OS X and is the path to the main binary on other
-; platforms.
-;
-; @RESPATH@
-; Equals Contents/Resources/ on Mac OS X and is equivalent to @BINPATH@ on other
-; platforms.
-
-#filter substitution
-
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-#define UNIX_BUT_NOT_MAC
-#endif
-#endif
-
-#ifdef XP_MACOSX
-; Mac bundle stuff
-@APPNAME@/Contents/Info.plist
-@APPNAME@/Contents/PkgInfo
-@RESPATH@/instantbird.icns
-@RESPATH@/@LPROJ_ROOT@.lproj/*
-#endif
-
-[@AB_CD@]
-@RESPATH@/@PREF_DIR@/all-l10n.js
-@RESPATH@/dictionaries/*
-@RESPATH@/hyphenation/*
-#ifdef HAVE_MAKENSISU
-@BINPATH@/uninstall/helper.exe
-#endif
-#ifdef MOZ_UPDATER
-@RESPATH@/update.locale
-@RESPATH@/updater.ini
-#endif
-
-#ifdef PKG_LOCALE_MANIFEST
-#include @PKG_LOCALE_MANIFEST@
-#endif
-
-[xpcom]
-@RESPATH@/dependentlibs.list
-#ifdef MOZ_SHARED_MOZGLUE
-@BINPATH@/@DLL_PREFIX@mozglue@DLL_SUFFIX@
-#endif
-#ifndef MOZ_STATIC_JS
-@BINPATH@/@DLL_PREFIX@mozjs@DLL_SUFFIX@
-#endif
-#ifndef MOZ_SYSTEM_NSPR
-#ifndef MOZ_FOLD_LIBS
-@BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@plc4@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@plds4@DLL_SUFFIX@
-#endif
-#endif
-#ifdef XP_MACOSX
-@BINPATH@/XUL
-#else
-@BINPATH@/@DLL_PREFIX@xul@DLL_SUFFIX@
-#endif
-#ifdef XP_MACOSX
-@BINPATH@/@MOZ_CHILD_PROCESS_NAME@.app/
-@BINPATH@/@DLL_PREFIX@plugin_child_interpose@DLL_SUFFIX@
-#else
-@BINPATH@/@MOZ_CHILD_PROCESS_NAME@
-#endif
-#ifdef XP_WIN32
-@BINPATH@/plugin-hang-ui@BIN_SUFFIX@
-#if MOZ_PACKAGE_MSVC_DLLS
-@BINPATH@/@MSVC_C_RUNTIME_DLL@
-@BINPATH@/@MSVC_CXX_RUNTIME_DLL@
-#endif
-#if MOZ_PACKAGE_WIN_UCRT_DLLS
-@BINPATH@/api-ms-win-*.dll
-@BINPATH@/ucrtbase.dll
-#endif
-#endif
-#ifdef MOZ_GTK3
-@BINPATH@/@DLL_PREFIX@mozgtk@DLL_SUFFIX@
-@BINPATH@/gtk2/@DLL_PREFIX@mozgtk@DLL_SUFFIX@
-#ifdef MOZ_WAYLAND
-@BINPATH@/@DLL_PREFIX@mozwayland@DLL_SUFFIX@
-#endif
-#endif
-
-; Security Reports
-@RESPATH@/components/SecurityReporter.manifest
-@RESPATH@/components/SecurityReporter.js
-
-; ANGLE GLES-on-D3D rendering library
-#ifdef MOZ_ANGLE_RENDERER
-@BINPATH@/libEGL.dll
-@BINPATH@/libGLESv2.dll
-
-#ifdef MOZ_D3DCOMPILER_VISTA_DLL
-@BINPATH@/@MOZ_D3DCOMPILER_VISTA_DLL@
-#endif
-#endif # MOZ_ANGLE_RENDERER
-
-#if defined(XP_WIN) && defined(MOZ_ENABLE_SKIA_PDF)
-@BINPATH@/pdfium.dll
-#endif
-
-; Modules
-@RESPATH@/modules/*
-
-[instantbird]
-#ifndef XP_UNIX
-@BINPATH@/@MOZ_APP_NAME@.exe
-#else
-@BINPATH@/@MOZ_APP_NAME@-bin
-@BINPATH@/@MOZ_APP_NAME@
-#endif
-@RESPATH@/application.ini
-#ifdef MOZ_UPDATER
-@RESPATH@/update-settings.ini
-#endif
-@BINPATH@/@DLL_PREFIX@lgpllibs@DLL_SUFFIX@
-@RESPATH@/blocklist.xml
-@RESPATH@/platform.ini
-#ifndef MOZ_SYSTEM_SQLITE
-#ifndef MOZ_FOLD_LIBS
-@BINPATH@/@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@
-#endif
-#endif
-#ifdef UNIX_BUT_NOT_MAC
-#ifdef MOZ_UPDATER
-@RESPATH@/icons/*.png
-#endif
-#endif
-#ifdef XP_WIN
-#ifdef _AMD64_
-@BINPATH@/@DLL_PREFIX@qipcap64@DLL_SUFFIX@
-#else
-@BINPATH@/@DLL_PREFIX@qipcap@DLL_SUFFIX@
-#endif
-#endif
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Instantbird Specific Files
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-@RESPATH@/defaults/profile/localstore.rdf
-@RESPATH@/defaults/profile/prefs.js
-@RESPATH@/defaults/profile/mimeTypes.rdf
-
-#ifdef XP_MACOSX
-@RESPATH@/components/ibDockBadge.js
-@RESPATH@/components/ibDockBadge.manifest
-#else
-@RESPATH@/components/profileMigrator.js
-@RESPATH@/components/profileMigrator.manifest
-#endif
-#ifdef MOZ_PURPLE
-; Purple should be the only binary component left,
-; now mintrayr is linked into libxul.
-@RESPATH@/components/components.manifest
-#endif
-@RESPATH@/components/instantbird.xpt
-@RESPATH@/components/captivedetect.xpt
-@RESPATH@/components/contentHandler.js
-@RESPATH@/components/contentHandler.manifest
-@RESPATH@/components/ibCommandLineHandler.js
-@RESPATH@/components/ibCommandLineHandler.manifest
-@RESPATH@/components/ibConvStatsService.js
-@RESPATH@/components/ibConvStatsService.manifest
-@RESPATH@/components/ibStatusCommandLineHandler.js
-@RESPATH@/components/ibStatusCommandLineHandler.manifest
-@RESPATH@/components/xpcom_base.xpt
-@RESPATH@/components/xpcom_system.xpt
-@RESPATH@/components/xpcom_components.xpt
-@RESPATH@/components/xpcom_ds.xpt
-@RESPATH@/components/xpcom_io.xpt
-@RESPATH@/components/xpcom_threads.xpt
-@RESPATH@/components/xpcom_xpti.xpt
-@RESPATH@/chrome/toolkit@JAREXT@
-@RESPATH@/chrome/toolkit.manifest
-@RESPATH@/chrome/instantbird@JAREXT@
-@RESPATH@/chrome/instantbird.manifest
-#ifndef XP_UNIX
-@RESPATH@/chrome/icons/default/blistWindow.ico
-@RESPATH@/chrome/icons/default/convWindow.ico
-@RESPATH@/chrome/icons/default/default.ico
-#elifdef UNIX_BUT_NOT_MAC
-@RESPATH@/chrome/icons/default/*.png
-#endif
-@RESPATH@/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
-@RESPATH@/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png
-@RESPATH@/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png
-@RESPATH@/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; chat
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-@RESPATH@/@PREF_DIR@/chat-prefs.js
-@RESPATH@/chrome/chat@JAREXT@
-@RESPATH@/chrome/chat.manifest
-@RESPATH@/components/chat.xpt
-@RESPATH@/components/imAccounts.js
-@RESPATH@/components/imAccounts.manifest
-@RESPATH@/components/imCommands.js
-@RESPATH@/components/imCommands.manifest
-@RESPATH@/components/imContacts.js
-@RESPATH@/components/imContacts.manifest
-@RESPATH@/components/imConversations.js
-@RESPATH@/components/imConversations.manifest
-@RESPATH@/components/imCore.js
-@RESPATH@/components/imCore.manifest
-@RESPATH@/components/facebook.js
-@RESPATH@/components/facebook.manifest
-@RESPATH@/components/gtalk.js
-@RESPATH@/components/gtalk.manifest
-@RESPATH@/components/irc.js
-@RESPATH@/components/irc.manifest
-@RESPATH@/components/matrix.js
-@RESPATH@/components/matrix.manifest
-@RESPATH@/components/skype.js
-@RESPATH@/components/skype.manifest
-@RESPATH@/components/twitter.js
-@RESPATH@/components/twitter.manifest
-@RESPATH@/components/xmpp.js
-@RESPATH@/components/xmpp.manifest
-@RESPATH@/components/yahoo.js
-@RESPATH@/components/yahoo.manifest
-@RESPATH@/components/odnoklassniki.js
-@RESPATH@/components/odnoklassniki.manifest
-@RESPATH@/components/smileProtocolHandler.js
-@RESPATH@/components/smileProtocolHandler.manifest
-@RESPATH@/components/logger.js
-@RESPATH@/components/logger.manifest
-
-#ifdef MOZ_PURPLE
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; libpurple
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-@RESPATH@/chrome/purple@JAREXT@
-@RESPATH@/chrome/purple.manifest
-@RESPATH@/components/@DLL_PREFIX@purplexpcom@DLL_SUFFIX@
-@RESPATH@/components/purplexpcom.xpt
-@RESPATH@/components/prpl.manifest
-#ifdef UNIX_BUT_NOT_MAC
-@RESPATH@/components/@DLL_PREFIX@bonjour@DLL_SUFFIX@
-@RESPATH@/components/@DLL_PREFIX@sipe@DLL_SUFFIX@
-#endif
-@RESPATH@/defaults/pref/purple-prefs.js
-#endif
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Default Profile Settings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; default pref files
-@RESPATH@/defaults/pref/all-instantbird.js
-@RESPATH@/defaults/pref/channel-prefs.js
-@RESPATH@/greprefs.js
-
-; login manager
-@RESPATH@/components/loginmgr.xpt
-@RESPATH@/components/nsLoginInfo.js
-@RESPATH@/components/nsLoginManager.js
-@RESPATH@/components/nsLoginManagerPrompter.js
-@RESPATH@/components/passwordmgr.manifest
-@RESPATH@/components/storage-json.js
-@RESPATH@/components/crypto-SDR.js
-
-; download progress
-@RESPATH@/components/nsHelperAppDlg.js
-@RESPATH@/components/nsHelperAppDlg.manifest
-
-; Protocol/Content handling
-@RESPATH@/components/nsContentDispatchChooser.js
-@RESPATH@/components/nsContentDispatchChooser.manifest
-@RESPATH@/components/HandlerService.js
-@RESPATH@/components/HandlerService.manifest
-@RESPATH@/components/nsWebHandlerApp.js
-@RESPATH@/components/nsWebHandlerApp.manifest
-
-; spellchecker (may not be present)
-@RESPATH@/components/spellchecker.xpt
-
-; misson control, autoconfig
-@RESPATH@/defaults/autoconfig/prefcalls.js
-@RESPATH@/components/autoconfig.xpt
-
-; [DevTools Startup Files]
-@RESPATH@/chrome/devtools-startup@JAREXT@
-@RESPATH@/chrome/devtools-startup.manifest
-@RESPATH@/@PREF_DIR@/devtools-startup.js
-
-; DevTools
-@RESPATH@/chrome/devtools@JAREXT@
-@RESPATH@/chrome/devtools.manifest
-@RESPATH@/@PREF_DIR@/devtools-client.js
-@RESPATH@/@PREF_DIR@/debugger.js
-@RESPATH@/components/devtools-startup.manifest
-@RESPATH@/components/devtools-startup.js
-@RESPATH@/components/aboutdebugging-registration.js
-@RESPATH@/components/aboutdebugging.manifest
-@RESPATH@/components/aboutdevtools-registration.js
-@RESPATH@/components/aboutdevtools.manifest
-@RESPATH@/components/aboutdevtoolstoolbox-registration.js
-@RESPATH@/components/aboutdevtoolstoolbox.manifest
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Base Package Files
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; xpconnect
-@RESPATH@/components/xpconnect.xpt
-
-; XP widgets/graphics
-@RESPATH@/components/widget.xpt
-#ifdef XP_MACOSX
-@RESPATH@/components/widget_cocoa.xpt
-#endif
-@RESPATH@/components/gfx.xpt
-
-; layout
-@RESPATH@/components/content_events.xpt
-@RESPATH@/components/content_html.xpt
-@RESPATH@/components/content_geckomediaplugins.xpt
-#ifdef MOZ_WEBRTC
-@RESPATH@/components/content_webrtc.xpt
-#endif
-@RESPATH@/components/content_xslt.xpt
-@RESPATH@/components/html5.xpt
-@RESPATH@/components/htmlparser.xpt
-@RESPATH@/components/layout_base.xpt
-#ifdef NS_PRINTING
-@RESPATH@/components/layout_printing.xpt
-#endif
-@RESPATH@/components/layout_xul.xpt
-@RESPATH@/components/xulapp.xpt
-@RESPATH@/components/xul.xpt
-
-@RESPATH@/components/inspector.xpt
-
-; Imaging:
-@RESPATH@/components/imglib2.xpt
-
-; accessibility (out of process API support)
-#ifdef ACCESSIBILITY
-@RESPATH@/components/accessibility.xpt
-#ifdef XP_WIN32
-@BINPATH@/Accessible.tlb
-@BINPATH@/AccessibleHandler.dll
-@BINPATH@/AccessibleMarshal.dll
-@BINPATH@/IA2Marshal.dll
-#endif
-#endif
-
-; caps (JavaScript security)
-@RESPATH@/components/caps.xpt
-
-; glue: appshell, docshell, uriloader, chrome, components
-@RESPATH@/components/appshell.xpt
-@RESPATH@/components/appstartup.xpt
-@RESPATH@/components/docshell.xpt
-@RESPATH@/components/uriloader.xpt
-@RESPATH@/components/webBrowser_core.xpt
-@RESPATH@/components/windowwatcher.xpt
-@RESPATH@/components/webbrowserpersist.xpt
-@RESPATH@/components/webextensions.xpt
-@RESPATH@/components/commandhandler.xpt
-
-; jar
-@RESPATH@/components/jar.xpt
-
-; prefs
-@RESPATH@/components/pref.xpt
-
-; profile
-@RESPATH@/components/toolkitprofile.xpt
-@RESPATH@/components/toolkit_finalizationwitness.xpt
-
-; toolkit
-@RESPATH@/components/BrowserElementParent.js
-@RESPATH@/components/BrowserElementParent.manifest
-@RESPATH@/components/PageThumbsStorageService.js
-@RESPATH@/components/XULStore.js
-@RESPATH@/components/XULStore.manifest
-@RESPATH@/components/browser-element.xpt
-@RESPATH@/components/CaptivePortalDetectComponents.manifest
-@RESPATH@/components/captivedetect.js
-@RESPATH@/components/commandlines.xpt
-@RESPATH@/components/chrome.xpt
-@RESPATH@/components/cryptoComponents.manifest
-@RESPATH@/components/Downloads.manifest
-@RESPATH@/components/DownloadLegacy.js
-@RESPATH@/components/nsDefaultCLH.js
-@RESPATH@/components/nsDefaultCLH.manifest
-@RESPATH@/components/nsFormAutoComplete.js
-@RESPATH@/components/FormHistoryStartup.js
-@RESPATH@/components/nsAsyncShutdown.manifest
-@RESPATH@/components/nsAsyncShutdown.js
-@RESPATH@/components/BuiltinProviders.manifest
-@RESPATH@/components/PresentationControlService.js
-@RESPATH@/components/nsInputListAutoComplete.js
-@RESPATH@/components/nsPrompter.js
-@RESPATH@/components/nsPrompter.manifest
-@RESPATH@/components/nsSearchService.js
-@RESPATH@/components/nsSearchSuggestions.js
-@RESPATH@/components/servicesComponents.manifest
-@RESPATH@/components/TooltipTextProvider.js
-@RESPATH@/components/TooltipTextProvider.manifest
-#ifdef MOZ_WEBRTC
-@RESPATH@/components/PeerConnection.js
-@RESPATH@/components/PeerConnection.manifest
-#endif
-@RESPATH@/components/toolkit_asyncshutdown.xpt
-@RESPATH@/components/toolkit_filewatcher.xpt
-@RESPATH@/components/toolkit_osfile.xpt
-@RESPATH@/components/toolkit_securityreporter.xpt
-#ifdef NIGHTLY_BUILD
-@RESPATH@/components/toolkit_perfmonitoring.xpt
-#endif
-@RESPATH@/components/toolkit_xulstore.xpt
-@RESPATH@/components/toolkitsearch.manifest
-#ifdef UNIX_BUT_NOT_MAC
-@RESPATH@/components/toolkitremote.xpt
-#endif
-#ifdef MOZ_GECKO_PROFILER
-@RESPATH@/components/profiler.xpt
-#endif
-@RESPATH@/components/ProcessSingleton.manifest
-@RESPATH@/components/MainProcessSingleton.js
-@RESPATH@/components/ContentProcessSingleton.js
-
-; rdf
-@RESPATH@/components/rdf.xpt
-
-; required i18n libraries
-@RESPATH@/components/intl.xpt
-@RESPATH@/components/locale.xpt
-@RESPATH@/components/uconv.xpt
-
-; dom
-@RESPATH@/components/dom.xpt
-@RESPATH@/components/dom_base.xpt
-@RESPATH@/components/dom_bindings.xpt
-@RESPATH@/components/dom_core.xpt
-@RESPATH@/components/dom_events.xpt
-@RESPATH@/components/dom_file.xpt
-@RESPATH@/components/dom_geolocation.xpt
-@RESPATH@/components/dom_html.xpt
-@RESPATH@/components/dom_media.xpt
-@RESPATH@/components/dom_network.xpt
-@RESPATH@/components/dom_notification.xpt
-@RESPATH@/components/dom_offline.xpt
-@RESPATH@/components/dom_power.xpt
-@RESPATH@/components/dom_push.xpt
-@RESPATH@/components/dom_presentation.xpt
-@RESPATH@/components/dom_quota.xpt
-@RESPATH@/components/dom_range.xpt
-@RESPATH@/components/dom_security.xpt
-@RESPATH@/components/dom_sidebar.xpt
-@RESPATH@/components/dom_storage.xpt
-@RESPATH@/components/dom_system.xpt
-@RESPATH@/components/dom_webspeechrecognition.xpt
-@RESPATH@/components/dom_webspeechsynth.xpt
-@RESPATH@/components/dom_workers.xpt
-@RESPATH@/components/dom_xul.xpt
-@RESPATH@/components/NetworkGeolocationProvider.js
-@RESPATH@/components/NetworkGeolocationProvider.manifest
-
-; editor / composer for HTML compose
-@RESPATH@/components/editor.xpt
-@RESPATH@/components/composer.xpt
-@RESPATH@/components/txmgr.xpt
-
-; find functionality
-@RESPATH@/components/txtsvc.xpt
-
-; moz storage
-@RESPATH@/components/storage.xpt
-
-; netwerk
-@RESPATH@/components/necko.xpt
-@RESPATH@/components/necko_about.xpt
-@RESPATH@/components/necko_dns.xpt
-@RESPATH@/components/necko_http.xpt
-@RESPATH@/components/necko_mdns.xpt
-@RESPATH@/components/necko_res.xpt
-@RESPATH@/components/necko_strconv.xpt
-@RESPATH@/components/necko_file.xpt
-@RESPATH@/components/necko_ftp.xpt
-@RESPATH@/components/necko_cache.xpt
-@RESPATH@/components/necko_cache2.xpt
-@RESPATH@/components/necko_cookie.xpt
-@RESPATH@/components/necko_socket.xpt
-@RESPATH@/components/necko_viewsource.xpt
-@RESPATH@/components/necko_websocket.xpt
-#ifdef NECKO_WIFI
-@RESPATH@/components/necko_wifi.xpt
-#endif
-@RESPATH@/components/necko_wyciwyg.xpt
-
-; extensions
-@RESPATH@/components/addonManager.js
-@RESPATH@/components/amContentHandler.js
-@RESPATH@/components/amInstallTrigger.js
-#ifdef MOZ_UPDATER
-@RESPATH@/components/nsUpdateService.js
-@RESPATH@/components/nsUpdateService.manifest
-@RESPATH@/components/nsUpdateServiceStub.js
-#endif
-@RESPATH@/components/nsUpdateTimerManager.js
-@RESPATH@/components/nsUpdateTimerManager.manifest
-@RESPATH@/components/utils.manifest
-@RESPATH@/components/simpleServices.js
-@RESPATH@/components/extensions.xpt
-@RESPATH@/components/extensions.manifest
-@RESPATH@/components/EditorUtils.manifest
-@RESPATH@/components/EditorUtils.js
-@RESPATH@/components/update.xpt
-@RESPATH@/components/nsURLFormatter.js
-@RESPATH@/components/nsURLFormatter.manifest
-@RESPATH@/components/urlformatter.xpt
-@RESPATH@/components/ContentPrefService2.js
-@RESPATH@/components/ContentPrefService2.manifest
-
-; [Extensions]
-@RESPATH@/components/extensions-toolkit.manifest
-@RESPATH@/components/extension-process-script.js
-
-; [Personal Security Manager]
-;
-; NSS libraries are signed in the staging directory,
-; meaning their .chk files are created there directly.
-;
-#ifndef MOZ_SYSTEM_NSS
-#if defined(XP_LINUX) && !defined(ANDROID)
-@BINPATH@/@DLL_PREFIX@freeblpriv3@DLL_SUFFIX@
-#else
-@BINPATH@/@DLL_PREFIX@freebl3@DLL_SUFFIX@
-#endif
-@BINPATH@/@DLL_PREFIX@nss3@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@nssckbi@DLL_SUFFIX@
-#ifndef NSS_DISABLE_DBM
-@BINPATH@/@DLL_PREFIX@nssdbm3@DLL_SUFFIX@
-#endif
-#ifndef MOZ_FOLD_LIBS
-@BINPATH@/@DLL_PREFIX@nssutil3@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@smime3@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@ssl3@DLL_SUFFIX@
-#endif
-@BINPATH@/@DLL_PREFIX@softokn3@DLL_SUFFIX@
-#endif
-@RESPATH@/chrome/pippki@JAREXT@
-@RESPATH@/chrome/pippki.manifest
-@RESPATH@/components/pipnss.xpt
-@RESPATH@/components/pippki.xpt
-
-; For process sandboxing
-#if defined(MOZ_SANDBOX)
-#if defined(XP_LINUX)
-@BINPATH@/@DLL_PREFIX@mozsandbox@DLL_SUFFIX@
-#endif
-@RESPATH@/components/sandbox.xpt
-#endif
-
-; for Solaris SPARC
-#ifdef SOLARIS
-@BINPATH@/@DLL_PREFIX@freebl_32fpu_3@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@freebl_32int_3@DLL_SUFFIX@
-@BINPATH@/@DLL_PREFIX@freebl_32int64_3@DLL_SUFFIX@
-#endif
-
-; core platform files
-@RESPATH@/components/FeedProcessor.js
-@RESPATH@/components/FeedProcessor.manifest
-@RESPATH@/components/autocomplete.xpt
-@RESPATH@/components/alerts.xpt
-@RESPATH@/components/jsdebugger.xpt
-@RESPATH@/components/downloads.xpt
-@RESPATH@/components/jsinspector.xpt
-@RESPATH@/components/fastfind.xpt
-@RESPATH@/components/ConsoleAPIStorage.js
-@RESPATH@/components/ConsoleAPI.manifest
-@RESPATH@/components/Push.js
-@RESPATH@/components/Push.manifest
-@RESPATH@/components/PushComponents.js
-@RESPATH@/components/ProcessSelector.js
-@RESPATH@/components/ProcessSelector.manifest
-@RESPATH@/components/contentAreaDropListener.js
-@RESPATH@/components/contentAreaDropListener.manifest
-@RESPATH@/components/WellKnownOpportunisticUtils.js
-@RESPATH@/components/WellKnownOpportunisticUtils.manifest
-@RESPATH@/components/directory.xpt
-@RESPATH@/components/layout_xul_tree.xpt
-@RESPATH@/components/mozfind.xpt
-@RESPATH@/components/mozintl.xpt
-@RESPATH@/components/mozIntl.manifest
-@RESPATH@/components/mozIntl.js
-@RESPATH@/components/mimetype.xpt
-@RESPATH@/components/parentalcontrols.xpt
-#ifdef MOZ_WEBRTC
-@RESPATH@/components/peerconnection.xpt
-#endif
-@RESPATH@/components/exthandler.xpt
-@RESPATH@/components/windowcreator.xpt
-@RESPATH@/components/nsINIProcessor.js
-@RESPATH@/components/nsINIProcessor.manifest
-@RESPATH@/components/pluginGlue.manifest
-@RESPATH@/components/txEXSLTRegExFunctions.js
-@RESPATH@/components/txEXSLTRegExFunctions.manifest
-@RESPATH@/components/feeds.xpt
-@RESPATH@/components/reputationservice.xpt
-@RESPATH@/components/saxparser.xpt
-@RESPATH@/components/satchel.manifest
-@RESPATH@/components/satchel.xpt
-@RESPATH@/components/shistory.xpt
-@RESPATH@/components/telemetry.xpt
-@RESPATH@/components/zipwriter.xpt
-@RESPATH@/components/places.xpt
-@RESPATH@/components/plugin.xpt
-@RESPATH@/components/prefetch.xpt
-
-; editor resource files
-@RESPATH@/res/EditorOverride.css
-@RESPATH@/res/contenteditable.css
-@RESPATH@/res/designmode.css
-@RESPATH@/res/table-add-column-after-active.gif
-@RESPATH@/res/table-add-column-after-hover.gif
-@RESPATH@/res/table-add-column-after.gif
-@RESPATH@/res/table-add-column-before-active.gif
-@RESPATH@/res/table-add-column-before-hover.gif
-@RESPATH@/res/table-add-column-before.gif
-@RESPATH@/res/table-add-row-after-active.gif
-@RESPATH@/res/table-add-row-after-hover.gif
-@RESPATH@/res/table-add-row-after.gif
-@RESPATH@/res/table-add-row-before-active.gif
-@RESPATH@/res/table-add-row-before-hover.gif
-@RESPATH@/res/table-add-row-before.gif
-@RESPATH@/res/table-remove-column-active.gif
-@RESPATH@/res/table-remove-column-hover.gif
-@RESPATH@/res/table-remove-column.gif
-@RESPATH@/res/table-remove-row-active.gif
-@RESPATH@/res/table-remove-row-hover.gif
-@RESPATH@/res/table-remove-row.gif
-@RESPATH@/res/grabber.gif
-#ifdef XP_MACOSX
-@RESPATH@/res/cursors/*
-#endif
-@RESPATH@/res/fonts/*
-@RESPATH@/res/dtd/*
-@RESPATH@/res/language.properties
-#ifdef XP_MACOSX
-@RESPATH@/res/MainMenu.nib/
-#endif
-
-; Content-accessible resources.
-@RESPATH@/contentaccessible/*
-
-; svg
-@RESPATH@/res/svg.css
-
-; [Updater]
-#ifdef MOZ_UPDATER
-#ifdef XP_MACOSX
-@BINPATH@/updater.app/
-#else
-@BINPATH@/updater@BIN_SUFFIX@
-#endif
-#endif
-
-; [MaintenanceService]
-;
-#ifdef MOZ_MAINTENANCE_SERVICE
-@BINPATH@/maintenanceservice.exe
-@BINPATH@/maintenanceservice_installer.exe
-#endif
-
-; [Crash Reporter]
-;
-#ifdef MOZ_CRASHREPORTER
-@RESPATH@/components/CrashService.manifest
-@RESPATH@/components/CrashService.js
-@RESPATH@/components/toolkit_crashservice.xpt
-#ifdef XP_MACOSX
-@BINPATH@/crashreporter.app/
-#else
-@BINPATH@/crashreporter@BIN_SUFFIX@
-@BINPATH@/minidump-analyzer@BIN_SUFFIX@
-@RESPATH@/crashreporter.ini
-#ifdef XP_UNIX
-@RESPATH@/Throbber-small.gif
-#endif
-#endif
-#ifdef MOZ_CRASHREPORTER_INJECTOR
-@BINPATH@/breakpadinjector.dll
-#endif
-#endif
-
-; [ Ping Sender ]
-;
-@BINPATH@/pingsender@BIN_SUFFIX@
-
-; Shutdown Terminator
-@RESPATH@/components/nsTerminatorTelemetry.js
-@RESPATH@/components/terminator.manifest
-
-; Background Hang Monitor
-@RESPATH@/components/backgroundhangmonitor.xpt
-
-; NOTE: This must match the config checks in
-; /toolkit/components/backgroundhangmonitor/moz.build.
-#if defined(NIGHTLY_BUILD) && !defined(MOZ_DEBUG) && !defined(MOZ_TSAN)
-@RESPATH@/components/BHRTelemetryService.js
-@RESPATH@/components/BHRTelemetryService.manifest
-#endif
deleted file mode 100644
--- a/im/installer/removed-files.in
+++ /dev/null
@@ -1,308 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# The removed-files.in file specifies files and directories to be removed during
-# an application update that are not automatically removed by the application
-# update process. The application update process handles the vast majority of
-# file and directory removals automatically so this file should not be used in
-# the vast majority of cases.
-
-# When to use removed-files.in file to remove files and directories:
-# * Files and directories located in the installation's "distribution/" and
-#   "extensions/" directories that were added before Firefox 27. Files and
-#   directories located in these directories were not included in the
-#   application update file removals for a complete update prior to Firefox 27.
-# * Empty directories that were accidentally added to the installation
-#   directory.
-# * Third party files and directories that were added to the installation
-#   directory. Under normal circumstances this should only be done after release
-#   drivers have approved the removal of these third party files.
-
-# If you are not sure whether a file or directory should be removed using the
-# removed-files.in file please contact one of the developers that work on
-# application update.
-
-# Note: the "distribution/" and "browser/extensions/" directories should never
-# be removed recursively since these directories are used by Partner builds and
-# custom installations.
-
-# To specify a file to be removed add the path to the file.
-# * If the file doesn't exist the update will succeed.
-# * If the file exists and can't be removed (e.g. the file is locked) the
-#   update will fail.
-#
-# Example: path/to/file
-
-# To specify a directory to be removed only if it is empty add the path to the
-# directory with a trailing forward slash.
-# * If the directory doesn't exist the update will succeed.
-# * If the directory can't be removed (e.g. the directory is locked, contains
-#   files, etc.) the update will succeed.
-#
-# Example: path/to/dir/
-
-# To specify a directory that should be recursively removed add the path to the
-# directory with a trailing forward slash and "*".
-# * If the directory doesn't exist the update will succeed.
-# * If all of the files the directory contains can be removed but the directory
-#   or a subdirectory can't be removed (e.g. the directory is locked) the update
-#   will succeed.
-# * If a file within the directory can't be removed the update will fail.
-#
-# Example: path/to/dir/*
-
-# Due to Apple Mac OS X packaging requirements files that are in the same
-# directory on other platforms must be located in different directories on
-# Mac OS X. The following defines allow specifying the Mac OS X bundle
-# location which also work on other platforms.
-#
-# @DIR_MACOS@
-# Equals Contents/MacOS/ on Mac OS X and is an empty string on other platforms.
-#
-# @DIR_RESOURCES@
-# Equals Contents/Resources/ on Mac OS X and is an empty string on other
-# platforms.
-
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-#define UNIX_BUT_NOT_MAC
-#endif
-#endif
-# remove old components registration
-components/xpti.dat
-components/compreg.dat
-# .xpt files are linked at package time except on Mac
-components/history.xpt
-#ifdef XP_WIN
-components/accessibility-msaa.xpt
-#endif /* XP_WIN */
-#ifdef XP_MACOSX
-# these 2 files were added after we started linking...
-components/content.xpt
-#else
-components/accessibility.xpt
-components/alerts.xpt
-components/appshell.xpt
-components/appstartup.xpt
-components/autocomplete.xpt
-components/autoconfig.xpt
-components/binary.manifest
-components/caps.xpt
-components/chardet.xpt
-components/chrome.xpt
-components/commandhandler.xpt
-components/commandlines.xpt
-components/composer.xpt
-components/content_base.xpt
-components/content_html.xpt
-components/content_htmldoc.xpt
-components/content_xmldoc.xpt
-components/content_xslt.xpt
-components/content_xtf.xpt
-components/contentprefs.xpt
-components/cookie.xpt
-components/directory.xpt
-#ifndef XP_WIN
-components/docshell.xpt
-#else /* XP_WIN */
-components/docshell_base.xpt
-#endif /* XP_WIN */
-components/dom.xpt
-components/dom_base.xpt
-components/dom_core.xpt
-components/dom_events.xpt
-components/dom_geolocation.xpt
-components/dom_html.xpt
-components/dom_loadsave.xpt
-components/dom_offline.xpt
-components/dom_range.xpt
-components/dom_sidebar.xpt
-components/dom_storage.xpt
-components/dom_threads.xpt
-components/dom_views.xpt
-components/dom_xul.xpt
-components/editor.xpt
-components/embed_base.xpt
-components/extensions.xpt
-components/exthandler.xpt
-components/fastfind.xpt
-components/feeds.xpt
-#ifndef XP_WIN
-components/filepicker.xpt
-#endif /* ! XP_WIN */
-components/find.xpt
-components/gfx.xpt
-components/htmlparser.xpt
-components/imgicon.xpt
-components/imglib2.xpt
-components/inspector.xpt
-components/intl.xpt
-components/jar.xpt
-components/jsdservice.xpt
-components/layout_base.xpt
-components/layout_printing.xpt
-components/layout_xul.xpt
-components/layout_xul_tree.xpt
-components/locale.xpt
-components/loginmgr.xpt
-components/lwbrk.xpt
-components/mimetype.xpt
-components/mozbrwsr.xpt
-components/mozfind.xpt
-components/necko.xpt
-components/necko_about.xpt
-components/necko_cache.xpt
-components/necko_cookie.xpt
-components/necko_dns.xpt
-components/necko_file.xpt
-components/necko_ftp.xpt
-components/necko_http.xpt
-components/necko_res.xpt
-components/necko_socket.xpt
-components/necko_strconv.xpt
-components/necko_viewsource.xpt
-components/oji.xpt
-components/parentalcontrols.xpt
-components/pipboot.xpt
-components/pipnss.xpt
-components/pippki.xpt
-components/places.xpt
-components/plugin.xpt
-components/pref.xpt
-components/prefetch.xpt
-components/profile.xpt
-#ifndef XP_WIN
-components/proxyObjInst.xpt
-#else /* XP_WIN */
-components/proxyObject.xpt
-#endif /* XP_WIN */
-components/purplexpcom.xpt
-components/rdf.xpt
-components/satchel.xpt
-components/saxparser.xpt
-components/shistory.xpt
-components/spellchecker.xpt
-components/storage.xpt
-components/toolkitprofile.xpt
-#ifndef XP_WIN
-components/toolkitremote.xpt
-#endif /* ! XP_WIN */
-components/toolkitsearch.xpt
-components/txmgr.xpt
-components/txtsvc.xpt
-components/uconv.xpt
-components/update.xpt
-components/uriloader.xpt
-components/urlformatter.xpt
-components/webBrowser_core.xpt
-components/webbrowserpersist.xpt
-components/webshell_idls.xpt
-components/widget.xpt
-components/windowwatcher.xpt
-components/xpcom_base.xpt
-components/xpcom_components.xpt
-components/xpcom_ds.xpt
-components/xpcom_io.xpt
-components/xpcom_system.xpt
-#ifndef XP_WIN
-components/xpcom_threads.xpt
-#else /* XP_WIN */
-components/xpcom_thread.xpt
-#endif /* XP_WIN */
-components/xpcom_xpti.xpt
-components/xpconnect.xpt
-components/xpinstall.xpt
-components/xulapp.xpt
-components/xuldoc.xpt
-components/xultmpl.xpt
-components/zipwriter.xpt
-#endif /* ! XP_MACOSX */
-#ifdef XP_WIN
-components/nsPostUpdateWin.js
-#endif /* XP_WIN */
-components/nsResetPref.js
-d3dx9_43.dll
-#ifdef XP_WIN
-IA2Marshal.dll
-#endif
-#ifdef XP_MACOSX
-libwidget.rsrc
-#endif /* XP_MACOSX */
-modules/JSON.jsm
-res/broken-image.gif
-#ifdef XP_MACOSX
-res/cursors/CVS/Entries
-res/cursors/CVS/Repository
-res/cursors/CVS/Root
-res/cursors/CVS/Tag
-#endif /* XP_MACOSX */
-res/dtd/mathml.dtd
-res/fonts/mathfont.properties
-res/fonts/mathfontSTIXNonUnicode.properties
-res/fonts/mathfontSTIXSize1.properties
-res/fonts/mathfontStandardSymbolsL.properties
-#ifdef XP_WIN
-res/fonts/mathfontSymbol.properties
-#endif /* XP_WIN */
-res/fonts/mathfontUnicode.properties
-res/mathml.css
-defaults/profile/US/localstore.rdf
-defaults/profile/US/mimeTypes.rdf
-defaults/profile/US/
-#ifdef UNIX_BUT_NOT_MAC
-chrome/icons/default/default.xpm
-#endif
-# old libpurple. Those files are now statically linked...
-components/@DLL_PREFIX@purpleloader@DLL_SUFFIX@
-libraries/@DLL_PREFIX@purple@DLL_SUFFIX@
-libraries/@DLL_PREFIX@purplexpcom@DLL_SUFFIX@
-#ifndef UNIX_BUT_NOT_MAC
-libraries/@DLL_PREFIX@glib@DLL_SUFFIX@
-libraries/@DLL_PREFIX@xml2@DLL_SUFFIX@
-@DLL_PREFIX@glib@DLL_SUFFIX@
-@DLL_PREFIX@xml2@DLL_SUFFIX@
-#endif /* ! UNIX_BUT_NOT_MAC */
-@DLL_PREFIX@purple@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@gg@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@irc@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@jabber@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@msnp9@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@myspace@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@netsoul@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@novell@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@oscar@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@qq@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@simple@DLL_SUFFIX@
-libraries/prpl/@DLL_PREFIX@yahoo@DLL_SUFFIX@
-protocols/@DLL_PREFIX@gg@DLL_SUFFIX@
-protocols/@DLL_PREFIX@irc@DLL_SUFFIX@
-protocols/@DLL_PREFIX@jabber@DLL_SUFFIX@
-protocols/@DLL_PREFIX@msn@DLL_SUFFIX@
-protocols/@DLL_PREFIX@myspace@DLL_SUFFIX@
-protocols/@DLL_PREFIX@netsoul@DLL_SUFFIX@
-protocols/@DLL_PREFIX@novell@DLL_SUFFIX@
-protocols/@DLL_PREFIX@oscar@DLL_SUFFIX@
-protocols/@DLL_PREFIX@qq@DLL_SUFFIX@
-protocols/@DLL_PREFIX@simple@DLL_SUFFIX@
-protocols/@DLL_PREFIX@yahoo@DLL_SUFFIX@
-components/@DLL_PREFIX@gg@DLL_SUFFIX@
-components/@DLL_PREFIX@irc@DLL_SUFFIX@
-components/@DLL_PREFIX@jabber@DLL_SUFFIX@
-components/@DLL_PREFIX@msn@DLL_SUFFIX@
-components/@DLL_PREFIX@myspace@DLL_SUFFIX@
-components/@DLL_PREFIX@netsoul@DLL_SUFFIX@
-components/@DLL_PREFIX@novell@DLL_SUFFIX@
-components/@DLL_PREFIX@oscar@DLL_SUFFIX@
-components/@DLL_PREFIX@qq@DLL_SUFFIX@
-components/@DLL_PREFIX@simple@DLL_SUFFIX@
-components/@DLL_PREFIX@yahoo@DLL_SUFFIX@
-# bug 469814
-#if XP_MACOSX
-components/libpurplexpcom.dylib.dSYM/Contents/Info.plist
-components/libpurplexpcom.dylib.dSYM/Contents/Resources/DWARF/libpurplexpcom.dylib
-#endif
-# bug 701875
-omni.jar
-@DLL_PREFIX@mozutils@DLL_SUFFIX@
-@DLL_PREFIX@xpcom@DLL_SUFFIX@
deleted file mode 100644
--- a/im/installer/windows/Makefile.in
+++ /dev/null
@@ -1,68 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-include $(moztopsrcdir)/toolkit/mozapps/installer/package-name.mk
-
-PKG_INST_PATH =
-CONFIG_DIR = instgen
-SFX_MODULE = $(commtopsrcdir)/other-licenses/7zstub/instantbird/7zSD.sfx
-DEFINES += -DMOZ_APP_VERSION=$(MOZ_APP_VERSION)
-PRE_RELEASE_SUFFIX := $(shell $(PYTHON) $(moztopsrcdir)/config/printprereleasesuffix.py $(MOZ_APP_VERSION))
-DEFINES += -DPRE_RELEASE_SUFFIX="$(PRE_RELEASE_SUFFIX)"
-
-ifdef MOZ_UPDATER
-DEFINES += -DMOZ_UPDATER=1
-endif
-
-INSTALLER_FILES = \
-	app.tag \
-	nsis/installer.nsi \
-	nsis/uninstaller.nsi \
-	nsis/shared.nsh \
-	$(NULL)
-
-BRANDING_FILES = \
-	branding.nsi \
-	wizHeader.bmp \
-	wizHeaderRTL.bmp \
-	wizWatermark.bmp \
-	$(NULL)
-
-DEFINES += \
-	-DMOZ_APP_NAME=$(MOZ_APP_NAME) \
-	-DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME} \
-	-DMOZILLA_VERSION=${MOZILLA_VERSION} \
-	$(NULL)
-
-include $(moztopsrcdir)/config/config.mk
-
-OVERRIDE_DEFAULT_GOAL := installer
-installer::
-	$(MAKE) -C .. installer-stage
-	$(MAKE) $(CONFIG_DIR)/setup.exe
-
-# For building the uninstaller during the application build so it can be
-# included for mar file generation.
-uninstaller::
-	$(RM) -rf $(CONFIG_DIR) && mkdir $(CONFIG_DIR)
-	$(INSTALL) $(addprefix $(srcdir)/,$(INSTALLER_FILES)) $(CONFIG_DIR)
-	$(INSTALL) $(addprefix $(DIST)/branding/,$(BRANDING_FILES)) $(CONFIG_DIR)
-	$(call py_action,preprocessor,-Fsubstitution $(DEFINES) $(ACDEFINES) \
-	  $(srcdir)/nsis/defines.nsi.in -o $(CONFIG_DIR)/defines.nsi)
-	$(PYTHON) $(moztopsrcdir)/toolkit/mozapps/installer/windows/nsis/preprocess-locale.py \
-          --preprocess-locale $(moztopsrcdir) \
-	  $(call EXPAND_LOCALE_SRCDIR,im/locales)/installer $(AB_CD) $(CONFIG_DIR)
-
-$(CONFIG_DIR)/setup.exe::
-	$(RM) -rf $(CONFIG_DIR) && mkdir $(CONFIG_DIR)
-	$(INSTALL) $(addprefix $(srcdir)/,$(INSTALLER_FILES)) $(CONFIG_DIR)
-	$(INSTALL) $(addprefix $(DIST)/branding/,$(BRANDING_FILES)) $(CONFIG_DIR)
-	$(call py_action,preprocessor,-Fsubstitution $(DEFINES) $(ACDEFINES) \
-	  $(srcdir)/nsis/defines.nsi.in -o $(CONFIG_DIR)/defines.nsi)
-	$(PYTHON) $(moztopsrcdir)/toolkit/mozapps/installer/windows/nsis/preprocess-locale.py \
-	  --preprocess-locale $(moztopsrcdir) \
-	  $(call EXPAND_LOCALE_SRCDIR,im/locales)/installer $(AB_CD) $(CONFIG_DIR)
-
-include $(moztopsrcdir)/config/rules.mk
-include $(moztopsrcdir)/toolkit/mozapps/installer/windows/nsis/makensis.mk
deleted file mode 100644
--- a/im/installer/windows/app.tag
+++ /dev/null
@@ -1,4 +0,0 @@
-;!@Install@!UTF-8!
-Title="Instantbird"
-RunProgram="setup.exe"
-;!@InstallEnd@!
\ No newline at end of file
deleted file mode 100644
--- a/im/installer/windows/moz.build
+++ /dev/null
@@ -1,4 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
deleted file mode 100644
--- a/im/installer/windows/nsis/CVS/Entries
+++ /dev/null
@@ -1,7 +0,0 @@
-/branding.nsi/1.3/Wed Jul 11 21:40:42 2007//
-/defines.nsi.in/1.3/Fri Sep 28 00:48:32 2007//
-/installer.nsi/1.19/Fri Nov 30 19:02:10 2007//
-/shared.nsh/1.9/Tue Sep 18 02:47:34 2007//
-/uninstaller.nsi/1.9/Fri Sep 28 00:48:32 2007//
-/updater_append.ini/1.1/Mon Jul 30 22:57:46 2007//
-D
deleted file mode 100644
--- a/im/installer/windows/nsis/CVS/Repository
+++ /dev/null
@@ -1,1 +0,0 @@
-mozilla/mail/installer/windows/nsis
deleted file mode 100644
--- a/im/installer/windows/nsis/CVS/Root
+++ /dev/null
@@ -1,1 +0,0 @@
-:pserver:anonymous:anonymous@cvs-mirror.mozilla.org:/cvsroot
deleted file mode 100755
--- a/im/installer/windows/nsis/defines.nsi.in
+++ /dev/null
@@ -1,61 +0,0 @@
-#filter substitution
-
-# These defines should match application.ini settings
-!define AppName               "Instantbird"
-!define AppVersion            "@MOZ_APP_VERSION@"
-
-!define GREVersion            @MOZILLA_VERSION@
-!define AB_CD                 "@AB_CD@"
-
-!define FileMainEXE           "@MOZ_APP_NAME@.exe"
-!define WindowClass           "InstantbirdMessageWindow"
-
-!define AppRegName            "Instantbird"
-!define ClientsRegName        "Instantbird"
-
-!define MinSupportedVer       "Microsoft Windows XP SP2"
-
-!define BrandShortName        "@MOZ_APP_DISPLAYNAME@"
-!define PreReleaseSuffix      "@PRE_RELEASE_SUFFIX@"
-!define BrandFullName         "${BrandFullNameInternal}${PreReleaseSuffix}"
-
-!define NO_UNINSTALL_SURVEY
-
-# NO_INSTDIR_FROM_REG is defined for pre-releases which have a PreReleaseSuffix
-# (e.g. Alpha X, Beta X, etc.) to prevent finding a non-default installation
-# directory in the registry and using that as the default. This prevents
-# Beta releases built with official branding from finding an existing install
-# of an official release and defaulting to its installation directory.
-!if "@PRE_RELEASE_SUFFIX@" != ""
-!define NO_INSTDIR_FROM_REG
-!endif
-
-# AccessibleHandler.dll uses a different CLSID depending on release channel.
-# These defines must match HANDLER_CLSID defined in
-# accessible/ipc/win/handler/HandlerData.idl
-
-!if "@MOZ_UPDATE_CHANNEL@" == "default"
-#ifdef DEBUG
-!define AccessibleHandlerCLSID "{398FFD8D-5382-48F7-9E3B-19012762D39A}"
-#else
-!define AccessibleHandlerCLSID "{CE573FAF-7815-4FC2-A031-B092268ACE9E}"
-#endif
-!else if "@MOZ_UPDATE_CHANNEL@" == "nightly"
-!define AccessibleHandlerCLSID "{4629216B-8753-41BF-9527-5BFF51401671}"
-!else if "@MOZ_UPDATE_CHANNEL@" == "beta"
-!define AccessibleHandlerCLSID "{21E9F98D-A6C9-4CB5-B288-AE2FD2A96C58}"
-!else if "@MOZ_UPDATE_CHANNEL@" == "release"
-!define AccessibleHandlerCLSID "{1BAA303D-B4B9-45E5-9CCB-E3FCA3E274B6}"
-!else
-!define AccessibleHandlerCLSID "{4A195748-DCA2-45FB-9295-0A139E76A9E7}"
-!endif
-
-# File details shared by both the installer and uninstaller
-VIProductVersion "1.0.0.0"
-VIAddVersionKey "ProductName"     "${BrandShortName}"
-VIAddVersionKey "CompanyName"     "${CompanyName}"
-VIAddVersionKey "LegalCopyright"  "${CompanyName}"
-VIAddVersionKey "FileVersion"     "${AppVersion}"
-VIAddVersionKey "ProductVersion"  "${AppVersion}"
-# Comments is not used but left below commented out for future reference
-# VIAddVersionKey "Comments"        "Comments"
deleted file mode 100755
--- a/im/installer/windows/nsis/installer.nsi
+++ /dev/null
@@ -1,871 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Required Plugins:
-# AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in
-# CityHash    http://mxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash
-# ShellLink   http://nsis.sourceforge.net/ShellLink_plug-in
-# UAC         http://nsis.sourceforge.net/UAC_plug-in
-
-; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs
-!verbose 3
-
-; 7-Zip provides better compression than the lzma from NSIS so we add the files
-; uncompressed and use 7-Zip to create a SFX archive of it
-SetDatablockOptimize on
-SetCompress off
-CRCCheck on
-
-RequestExecutionLevel user
-
-; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can
-; be removed after we require NSIS 3.0a2 or greater.
-!ifdef NSIS_PACKEDVERSION
-  Unicode true
-  ManifestSupportedOS all
-  ManifestDPIAware true
-!endif
-
-!addplugindir ./
-
-Var TmpVal
-Var StartMenuDir
-Var InstallType
-Var AddStartMenuSC
-Var AddQuickLaunchSC
-Var AddDesktopSC
-Var PageName
-Var InstallMaintenanceService
-
-; On Vista and above attempt to elevate Standard Users in addition to users that
-; are a member of the Administrators group.
-!define NONADMIN_ELEVATE
-
-; Other included files may depend upon these includes!
-; The following includes are provided by NSIS.
-!include FileFunc.nsh
-!include LogicLib.nsh
-!include MUI.nsh
-!include WinMessages.nsh
-!include WinVer.nsh
-!include WordFunc.nsh
-
-!insertmacro GetOptions
-!insertmacro GetParameters
-!insertmacro GetSize
-!insertmacro StrFilter
-!insertmacro WordReplace
-
-; The following includes are custom.
-!include branding.nsi
-!include defines.nsi
-!include common.nsh
-!include locales.nsi
-
-VIAddVersionKey "FileDescription" "${BrandShortName} Installer"
-VIAddVersionKey "OriginalFilename" "setup.exe"
-
-; Must be inserted before other macros that use logging
-!insertmacro _LoggingCommon
-
-; Most commonly used macros for managing shortcuts
-!insertmacro _LoggingShortcutsCommon
-
-!insertmacro ChangeMUIHeaderImage
-!insertmacro CheckForFilesInUse
-!insertmacro CleanUpdatesDir
-!insertmacro CopyFilesFromDir
-!insertmacro FindSMProgramsDir
-!insertmacro GetPathFromString
-!insertmacro GetParent
-!insertmacro InitHashAppModelId
-!insertmacro ManualCloseAppPrompt
-!insertmacro RegCleanMain
-!insertmacro RegCleanUninstall
-!insertmacro SetBrandNameVars
-!insertmacro UnloadUAC
-!insertmacro WriteRegStr2
-!insertmacro WriteRegDWORD2
-
-!include shared.nsh
-
-; Helper macros for ui callbacks. Insert these after shared.nsh
-!insertmacro CheckCustomCommon
-!insertmacro InstallEndCleanupCommon
-!insertmacro InstallOnInitCommon
-!insertmacro InstallStartCleanupCommon
-!insertmacro LeaveDirectoryCommon
-!insertmacro LeaveOptionsCommon
-!insertmacro OnEndCommon
-!insertmacro PreDirectoryCommon
-
-Name "${BrandFullName}"
-OutFile "setup.exe"
-InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} (${AppVersion})" "InstallLocation"
-InstallDir "$PROGRAMFILES\${BrandFullName}\"
-ShowInstDetails nevershow
-
-################################################################################
-# Modern User Interface - MUI
-
-!define MUI_ABORTWARNING
-!define MUI_ICON setup.ico
-!define MUI_UNICON setup.ico
-!define MUI_WELCOMEPAGE_TITLE_3LINES
-!define MUI_HEADERIMAGE
-!define MUI_HEADERIMAGE_RIGHT
-!define MUI_WELCOMEFINISHPAGE_BITMAP wizWatermark.bmp
-
-; Use a right to left header image when the language is right to left
-!ifdef ${AB_CD}_rtl
-!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp
-!else
-!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp
-!endif
-
-/**
- * Installation Pages
- */
-; Welcome Page
-!define MUI_PAGE_CUSTOMFUNCTION_PRE preWelcome
-!insertmacro MUI_PAGE_WELCOME
-
-; Custom Options Page
-Page custom preOptions leaveOptions
-
-; Select Install Directory Page
-!define MUI_PAGE_CUSTOMFUNCTION_PRE preDirectory
-!define MUI_PAGE_CUSTOMFUNCTION_LEAVE leaveDirectory
-!define MUI_DIRECTORYPAGE_VERIFYONLEAVE
-!insertmacro MUI_PAGE_DIRECTORY
-
-; Custom Shortcuts Page
-Page custom preShortcuts leaveShortcuts
-
-; Start Menu Folder Page Configuration
-!define MUI_PAGE_CUSTOMFUNCTION_PRE preStartMenu
-!define MUI_PAGE_CUSTOMFUNCTION_LEAVE leaveStartMenu
-!define MUI_STARTMENUPAGE_NODISABLE
-!insertmacro MUI_PAGE_STARTMENU Application $StartMenuDir
-
-; Custom Summary Page
-Page custom preSummary leaveSummary
-
-; Install Files Page
-!insertmacro MUI_PAGE_INSTFILES
-
-; Finish Page
-!define MUI_FINISHPAGE_TITLE_3LINES
-!define MUI_FINISHPAGE_RUN
-!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApp
-!define MUI_FINISHPAGE_RUN_TEXT $(LAUNCH_TEXT)
-!define MUI_PAGE_CUSTOMFUNCTION_PRE preFinish
-!insertmacro MUI_PAGE_FINISH
-
-; Use the default dialog for IDD_VERIFY for a simple Banner
-ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe"
-
-################################################################################
-# Install Sections
-
-; Cleanup operations to perform at the start of the installation.
-Section "-InstallStartCleanup"
-  SetDetailsPrint both
-  DetailPrint $(STATUS_CLEANUP)
-  SetDetailsPrint none
-
-  SetOutPath "$INSTDIR"
-  ${StartInstallLog} "${BrandFullName}" "${AB_CD}" "${AppVersion}" "${GREVersion}"
-
-  ; Delete the app exe to prevent launching the app while we are installing.
-  ClearErrors
-  ${DeleteFile} "$INSTDIR\${FileMainEXE}"
-  ${If} ${Errors}
-    ; If the user closed the application it can take several seconds for it to
-    ; shut down completely. If the application is being used by another user we
-    ; can rename the file and then delete is when the system is restarted.
-    Sleep 5000
-    ${DeleteFile} "$INSTDIR\${FileMainEXE}"
-    ClearErrors
-  ${EndIf}
-
-  ; Remove the updates directory for Vista and above
-  ${CleanUpdatesDir} "Instantbird"
-
-  ${InstallStartCleanupCommon}
-SectionEnd
-
-Section "-Application" APP_IDX
-  ${StartUninstallLog}
-
-  SetDetailsPrint both
-  DetailPrint $(STATUS_INSTALL_APP)
-  SetDetailsPrint none
-
-  ${LogHeader} "Installing Main Files"
-  ${CopyFilesFromDir} "$EXEDIR\core" "$INSTDIR" \
-                      "$(ERROR_CREATE_DIRECTORY_PREFIX)" \
-                      "$(ERROR_CREATE_DIRECTORY_SUFFIX)"
-
-  ; Register DLLs
-  ; XXXrstrong - AccessibleMarshal.dll can be used by multiple applications but
-  ; is only registered for the last application installed. When the last
-  ; application installed is uninstalled AccessibleMarshal.dll will no longer be
-  ; registered. bug 338878
-  ${LogHeader} "DLL Registration"
-  ClearErrors
-  RegDLL "$INSTDIR\AccessibleMarshal.dll"
-  ${If} ${Errors}
-    ${LogMsg} "** ERROR Registering: $INSTDIR\AccessibleMarshal.dll **"
-  ${Else}
-    ${LogUninstall} "DLLReg: \AccessibleMarshal.dll"
-    ${LogMsg} "Registered: $INSTDIR\AccessibleMarshal.dll"
-  ${EndIf}
-
-  ClearErrors
-
-  ${RegisterDLL} "$INSTDIR\AccessibleHandler.dll"
-  ${If} ${Errors}
-    ${LogMsg} "** ERROR Registering: $INSTDIR\AccessibleHandler.dll **"
-  ${Else}
-    ${LogUninstall} "DLLReg: \AccessibleHandler.dll"
-    ${LogMsg} "Registered: $INSTDIR\AccessibleHandler.dll"
-  ${EndIf}
-
-  ; Write extra files created by the application to the uninstall log so they
-  ; will be removed when the application is uninstalled. To remove an empty
-  ; directory write a bogus filename to the deepest directory and all empty
-  ; parent directories will be removed.
-  ${LogUninstall} "File: \components\compreg.dat"
-  ${LogUninstall} "File: \components\xpti.dat"
-  ${LogUninstall} "File: \.autoreg"
-  ${LogUninstall} "File: \active-update.xml"
-  ${LogUninstall} "File: \install.log"
-  ${LogUninstall} "File: \install_status.log"
-  ${LogUninstall} "File: \install_wizard.log"
-  ${LogUninstall} "File: \updates.xml"
-
-  ; Default for creating Start Menu folder and shortcuts
-  ; (1 = create, 0 = don't create)
-  ${If} $AddStartMenuSC == ""
-    StrCpy $AddStartMenuSC "1"
-  ${EndIf}
-
-  ; Default for creating Quick Launch shortcut (1 = create, 0 = don't create)
-  ${If} $AddQuickLaunchSC == ""
-    StrCpy $AddQuickLaunchSC "1"
-  ${EndIf}
-
-  ; Default for creating Desktop shortcut (1 = create, 0 = don't create)
-  ${If} $AddDesktopSC == ""
-    StrCpy $AddDesktopSC "1"
-  ${EndIf}
-
-  ${LogHeader} "Adding Registry Entries"
-  SetShellVarContext current  ; Set SHCTX to HKCU
-  ${RegCleanMain} "Software\Mozilla"
-  ${RegCleanUninstall}
-
-  ClearErrors
-  WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
-  ${If} ${Errors}
-    StrCpy $TmpVal "HKCU" ; used primarily for logging
-  ${Else}
-    SetShellVarContext all  ; Set SHCTX to HKLM
-    DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
-    StrCpy $TmpVal "HKLM" ; used primarily for logging
-    ${RegCleanMain} "Software\Mozilla"
-    ${RegCleanUninstall}
-  ${EndIf}
-
-  ; setup the application model id registration value
-  ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
-
-  ${RemoveDeprecatedKeys}
-
-  ; The previous installer adds several regsitry values to both HKLM and HKCU.
-  ; We now try to add to HKLM and if that fails to HKCU
-
-  ; The order that reg keys and values are added is important if you use the
-  ; uninstall log to remove them on uninstall. When using the uninstall log you
-  ; MUST add children first so they will be removed first on uninstall so they
-  ; will be empty when the key is deleted. This allows the uninstaller to
-  ; specify that only empty keys will be deleted.
-  ${SetAppKeys}
-
-  ; Uninstall keys can only exist under HKLM on some versions of windows. Since
-  ; it doesn't cause problems always add them.
-  ${SetUninstallKeys}
-
-  ; The following keys should only be set if we can write to HKLM
-  ${If} $TmpVal == "HKLM"
-    ; Set the Start Menu Internet and Vista Registered App HKLM registry keys.
-    ${SetClientsIM}
-
-    ; If we are writing to HKLM and create the quick launch and the desktop
-    ; shortcuts set IconsVisible to 1 otherwise to 0.
-    StrCpy $0 "Software\Clients\IM\${ClientsRegName}\InstallInfo"
-    ${If} $AddQuickLaunchSC == 1
-    ${OrIf} $AddDesktopSC == 1
-      WriteRegDWORD HKLM "$0" "IconsVisible" 1
-    ${Else}
-      WriteRegDWORD HKLM "$0" "IconsVisible" 0
-    ${EndIf}
-  ${EndIf}
-
-  ; These need special handling on uninstall since they may be overwritten by
-  ; an install into a different location.
-  StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}"
-  ${WriteRegStr2} $TmpVal "$0" "" "$INSTDIR\${FileMainEXE}" 0
-  ${WriteRegStr2} $TmpVal "$0" "Path" "$INSTDIR" 0
-
-  ; Create shortcuts
-  ${LogHeader} "Adding Shortcuts"
-
-  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
-
-  ; Always add the relative path to the application's Start Menu directory and
-  ; the application's shortcuts to the shortcuts log ini file. The
-  ; DeleteShortcuts macro will do the right thing on uninstall if they don't
-  ; exist.
-  ${LogSMProgramsDirRelPath} "$StartMenuDir"
-  ${LogSMProgramsShortcut} "${BrandFullName}.lnk"
-  ${LogSMProgramsShortcut} "${BrandFullName} ($(SAFE_MODE)).lnk"
-  ${LogQuickLaunchShortcut} "${BrandFullName}.lnk"
-  ${LogDesktopShortcut} "${BrandFullName}.lnk"
-
-  ; UAC only allows elevating to an Admin account so there is no need to add
-  ; the Start Menu or Desktop shortcuts from the original unelevated process
-  ; since this will either add it for the user if unelevated or All Users if
-  ; elevated.
-  ${If} $AddStartMenuSC == 1
-    ${Unless} ${FileExists} "$SMPROGRAMS\$StartMenuDir"
-      CreateDirectory "$SMPROGRAMS\$StartMenuDir"
-      ${LogMsg} "Added Start Menu Directory: $SMPROGRAMS\$StartMenuDir"
-    ${EndUnless}
-    CreateShortCut "$SMPROGRAMS\$StartMenuDir\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
-    ${If} ${AtLeastWin7}
-    ${AndIf} "$AppUserModelID" != ""
-      ApplicationID::Set "$SMPROGRAMS\$StartMenuDir\${BrandFullName}.lnk" "$AppUserModelID"
-    ${EndIf}
-    ${LogMsg} "Added Shortcut: $SMPROGRAMS\$StartMenuDir\${BrandFullName}.lnk"
-    CreateShortCut "$SMPROGRAMS\$StartMenuDir\${BrandFullName} ($(SAFE_MODE)).lnk" "$INSTDIR\${FileMainEXE}" "-safe-mode" "$INSTDIR\${FileMainEXE}" 0
-    ${If} ${AtLeastWin7}
-    ${AndIf} "$AppUserModelID" != ""
-      ApplicationID::Set "$SMPROGRAMS\$StartMenuDir\${BrandFullName} ($(SAFE_MODE)).lnk" "$AppUserModelID"
-    ${EndIf}
-    ${LogMsg} "Added Shortcut: $SMPROGRAMS\$StartMenuDir\${BrandFullName} ($(SAFE_MODE)).lnk"
-  ${EndIf}
-
-  !insertmacro MUI_STARTMENU_WRITE_END
-
-  ${If} $AddDesktopSC == 1
-    CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
-    ${If} ${AtLeastWin7}
-    ${AndIf} "$AppUserModelID" != ""
-      ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID"
-    ${EndIf}
-    ${LogMsg} "Added Shortcut: $DESKTOP\${BrandFullName}.lnk"
-  ${EndIf}
-
-  ; If elevated the Quick Launch shortcut must be added from the unelevated
-  ; original process.
-  ${If} $AddQuickLaunchSC == 1
-    ClearErrors
-    ${GetParameters} $0
-    ${GetOptions} "$0" "/UAC:" $0
-    ${If} ${Errors}
-      Call AddQuickLaunchShortcut
-      ${LogMsg} "Added Shortcut: $QUICKLAUNCH\${BrandFullName}.lnk"
-    ${Else}
-      ; It is not possible to add a log entry from the unelevated process so
-      ; add the log entry without the path since there is no simple way to know
-      ; the correct full path.
-      ${LogMsg} "Added Quick Launch Shortcut: ${BrandFullName}.lnk"
-      GetFunctionAddress $0 AddQuickLaunchShortcut
-      UAC::ExecCodeSegment $0
-    ${EndIf}
-  ${EndIf}
-SectionEnd
-
-; Cleanup operations to perform at the end of the installation.
-Section "-InstallEndCleanup"
-  SetDetailsPrint both
-  DetailPrint "$(STATUS_CLEANUP)"
-  SetDetailsPrint none
-
-  ${Unless} ${Silent}
-    ${MUI_INSTALLOPTIONS_READ} $0 "options.ini" "Field 6" "State"
-    ${If} "$0" == "1"
-      ${LogHeader} "Setting as the default instant messaging"
-      ClearErrors
-      ${GetParameters} $0
-      ${GetOptions} "$0" "/UAC:" $0
-      ${If} ${Errors}
-        Call SetAsDefaultAppUserHKCU
-      ${Else}
-        GetFunctionAddress $0 SetAsDefaultAppUserHKCU
-        UAC::ExecCodeSegment $0
-      ${EndIf}
-    ${EndIf}
-  ${EndUnless}
-
-  ; Refresh desktop icons
-  System::Call "shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)"
-
-  ${InstallEndCleanupCommon}
-
-  ${If} ${RebootFlag}
-    ; When a reboot is required give SHChangeNotify time to finish the
-    ; refreshing the icons so the OS doesn't display the icons from helper.exe
-    Sleep 10000
-    ${LogHeader} "Reboot Required To Finish Installation"
-    ; ${FileMainEXE}.moz-upgrade should never exist but just in case...
-    ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-upgrade"
-      Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-upgrade"
-    ${EndUnless}
-
-    ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
-      ClearErrors
-      Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-delete"
-      ${Unless} ${Errors}
-        Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
-      ${EndUnless}
-    ${EndIf}
-
-    ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}"
-      CopyFiles /SILENT "$INSTDIR\uninstall\helper.exe" "$INSTDIR"
-      FileOpen $0 "$INSTDIR\${FileMainEXE}" w
-      FileWrite $0 "Will be deleted on restart"
-      Rename /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-upgrade" "$INSTDIR\${FileMainEXE}"
-      FileClose $0
-      Delete "$INSTDIR\${FileMainEXE}"
-      Rename "$INSTDIR\helper.exe" "$INSTDIR\${FileMainEXE}"
-    ${EndUnless}
-  ${EndIf}
-SectionEnd
-
-################################################################################
-# Helper Functions
-
-Function AddQuickLaunchShortcut
-  CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
-  ${If} ${AtLeastWin7}
-  ${AndIf} "$AppUserModelID" != ""
-    ApplicationID::Set "$QUICKLAUNCH\${BrandFullName}.lnk" "$AppUserModelID"
-  ${EndIf}
-FunctionEnd
-
-Function CheckExistingInstall
-  ; If there is a pending file copy from a previous uninstall don't allow
-  ; installing until after the system has rebooted.
-  IfFileExists "$INSTDIR\${FileMainEXE}.moz-upgrade" +1 +4
-  MessageBox MB_YESNO "$(WARN_RESTART_REQUIRED_UPGRADE)" IDNO +2
-  Reboot
-  Quit
-
-  ; If there is a pending file deletion from a previous uninstall don't allow
-  ; installing until after the system has rebooted.
-  IfFileExists "$INSTDIR\${FileMainEXE}.moz-delete" +1 +4
-  MessageBox MB_YESNO "$(WARN_RESTART_REQUIRED_UNINSTALL)" IDNO +2
-  Reboot
-  Quit
-
-  ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
-    Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)"
-
-    ${If} "$TmpVal" == "FoundMessageWindow"
-      Sleep 5000
-    ${EndIf}
-
-    ${PushFilesToCheck}
-
-    ; Store the return value in $TmpVal so it is less likely to be accidentally
-    ; overwritten elsewhere.
-    ${CheckForFilesInUse} $TmpVal
-
-    Banner::destroy
-
-    ${If} "$TmpVal" == "true"
-      StrCpy $TmpVal "FoundMessageWindow"
-      ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)"
-      StrCpy $TmpVal "true"
-    ${EndIf}
-  ${EndIf}
-FunctionEnd
-
-Function LaunchApp
-  ClearErrors
-  ${GetParameters} $0
-  ${GetOptions} "$0" "/UAC:" $1
-  ${If} ${Errors}
-    ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)"
-    Exec "$INSTDIR\${FileMainEXE}"
-  ${Else}
-    GetFunctionAddress $0 LaunchAppFromElevatedProcess
-    UAC::ExecCodeSegment $0
-  ${EndIf}
-FunctionEnd
-
-Function LaunchAppFromElevatedProcess
-  ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)"
-
-  ; Find the installation directory when launching using GetFunctionAddress
-  ; from an elevated installer since $INSTDIR will not be set in this installer
-  ReadRegStr $0 HKLM "Software\Clients\IM\${ClientsRegName}\DefaultIcon" ""
-  ${GetPathFromString} "$0" $0
-  ${GetParent} "$0" $1
-  ; Set our current working directory to the application's install directory
-  ; otherwise the 7-Zip temp directory will be in use and won't be deleted.
-  SetOutPath "$1"
-  Exec "$0"
-FunctionEnd
-
-################################################################################
-# Language
-
-!insertmacro MOZ_MUI_LANGUAGE 'baseLocale'
-!verbose push
-!verbose 3
-!include "overrideLocale.nsh"
-!include "customLocale.nsh"
-!verbose pop
-
-; Set this after the locale files to override it if it is in the locale
-; using " " for BrandingText will hide the "Nullsoft Install System..." branding
-BrandingText " "
-
-################################################################################
-# Page pre, show, and leave functions
-
-Function preWelcome
-  StrCpy $PageName "Welcome"
-  ${If} ${FileExists} "$EXEDIR\core\distribution\modern-wizard.bmp"
-    Delete "$PLUGINSDIR\modern-wizard.bmp"
-    CopyFiles /SILENT "$EXEDIR\core\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp"
-  ${EndIf}
-FunctionEnd
-
-Function preOptions
-  StrCpy $PageName "Options"
-  ${If} ${FileExists} "$EXEDIR\core\distribution\modern-header.bmp"
-  ${AndIf} $hHeaderBitmap == ""
-    Delete "$PLUGINSDIR\modern-header.bmp"
-    CopyFiles /SILENT "$EXEDIR\core\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp"
-    ${ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp"
-  ${EndIf}
-  !insertmacro MUI_HEADER_TEXT "$(OPTIONS_PAGE_TITLE)" "$(OPTIONS_PAGE_SUBTITLE)"
-  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "options.ini"
-FunctionEnd
-
-Function leaveOptions
-  ${MUI_INSTALLOPTIONS_READ} $0 "options.ini" "Settings" "State"
-  ${If} $0 != 0
-    Abort
-  ${EndIf}
-  ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 2" "State"
-  StrCmp $R0 "1" +1 +2
-  StrCpy $InstallType ${INSTALLTYPE_BASIC}
-  ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 3" "State"
-  StrCmp $R0 "1" +1 +2
-  StrCpy $InstallType ${INSTALLTYPE_CUSTOM}
-
-  ${LeaveOptionsCommon}
-
-  ${If} $InstallType == ${INSTALLTYPE_BASIC}
-    Call CheckExistingInstall
-  ${EndIf}
-FunctionEnd
-
-Function preDirectory
-  StrCpy $PageName "Directory"
-  ${PreDirectoryCommon}
-FunctionEnd
-
-Function leaveDirectory
-  ${If} $InstallType == ${INSTALLTYPE_BASIC}
-    Call CheckExistingInstall
-  ${EndIf}
-  ${LeaveDirectoryCommon} "$(WARN_DISK_SPACE)" "$(WARN_WRITE_ACCESS)"
-FunctionEnd
-
-Function preShortcuts
-  StrCpy $PageName "Shortcuts"
-  ${CheckCustomCommon}
-  !insertmacro MUI_HEADER_TEXT "$(SHORTCUTS_PAGE_TITLE)" "$(SHORTCUTS_PAGE_SUBTITLE)"
-  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "shortcuts.ini"
-FunctionEnd
-
-Function leaveShortcuts
-  ${MUI_INSTALLOPTIONS_READ} $0 "shortcuts.ini" "Settings" "State"
-  ${If} $0 != 0
-    Abort
-  ${EndIf}
-  ${MUI_INSTALLOPTIONS_READ} $AddDesktopSC "shortcuts.ini" "Field 2" "State"
-  ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
-  ${MUI_INSTALLOPTIONS_READ} $AddQuickLaunchSC "shortcuts.ini" "Field 4" "State"
-
-  ; If Start Menu shortcuts won't be created call CheckExistingInstall here
-  ; since leaveStartMenu will not be called.
-  ${If} $AddStartMenuSC != 1
-  ${AndIf} $InstallType == ${INSTALLTYPE_CUSTOM}
-    Call CheckExistingInstall
-  ${EndIf}
-FunctionEnd
-
-Function preStartMenu
-  StrCpy $PageName "StartMenu"
-  ; With the Unicode installer the path to the application's Start Menu
-  ; directory relative to the Start Menu's Programs directory is written to the
-  ; shortcuts log ini file and is used to set the default Start Menu directory.
-  ${GetSMProgramsDirRelPath} $0
-  ${If} "$0" != ""
-    StrCpy $StartMenuDir "$0"
-  ${Else}
-    ; Prior to the Unicode installer the path to the application's Start Menu
-    ; directory relative to the Start Menu's Programs directory was written to
-    ; the registry and use this value to set the default Start Menu directory.
-    ClearErrors
-    ReadRegStr $0 HKLM "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main" "Start Menu Folder"
-    ${If} ${Errors}
-      ; Use the FindSMProgramsDir macro to find a previously used path to the
-      ; application's Start Menu directory relative to the Start Menu's Programs
-      ; directory in the uninstall log and use this value to set the default
-      ; Start Menu directory.
-      ${FindSMProgramsDir} $0
-      ${If} "$0" != ""
-        StrCpy $StartMenuDir "$0"
-      ${EndIf}
-    ${Else}
-      StrCpy $StartMenuDir "$0"
-    ${EndUnless}
-  ${EndIf}
-
-  ${CheckCustomCommon}
-  ${If} $AddStartMenuSC != 1
-    Abort
-  ${EndIf}
-FunctionEnd
-
-Function leaveStartMenu
-  ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
-    Call CheckExistingInstall
-  ${EndIf}
-FunctionEnd
-
-Function preSummary
-  StrCpy $PageName "Summary"
-  ; Setup the summary.ini file for the Custom Summary Page
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "3"
-
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Type   "label"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Text   "$(SUMMARY_INSTALLED_TO)"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Left   "0"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Top    "5"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Bottom "15"
-
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Type   "text"
-  ; The contents of this control must be set as follows in the pre function
-  ; ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND"
-  ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" state  ""
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Left   "0"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Top    "17"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Bottom "30"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" flags  "READONLY"
-
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Type   "label"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Left   "0"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Top    "130"
-  WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Bottom "150"
-
-  ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_UPGRADE_CLICK)"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NextButtonText "$(UPGRADE_BUTTON)"
-  ${Else}
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_INSTALL_CLICK)"
-    DeleteINIStr "$PLUGINSDIR\summary.ini" "Settings" NextButtonText
-  ${EndIf}
-
-
-  ; Remove the "Field 4" ini section in case the user hits back and changes the
-  ; installation directory which could change whether the make default checkbox
-  ; should be displayed.
-  DeleteINISec "$PLUGINSDIR\summary.ini" "Field 4"
-
-  ${If} "$TmpVal" == "true"
-    StrCpy $0 "4"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Top    "35"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Bottom "50"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "$0"
-
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Type   "label"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Text   "$(SUMMARY_REBOOT_REQUIRED_INSTALL)"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Left   "0"
-    WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Right  "-1"
-  ${EndIf}
-
-  !insertmacro MUI_HEADER_TEXT "$(SUMMARY_PAGE_TITLE)" "$(SUMMARY_PAGE_SUBTITLE)"
-
-  ; The Summary custom page has a textbox that will automatically receive
-  ; focus. This sets the focus to the Install button instead.
-  !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "summary.ini"
-  GetDlgItem $0 $HWNDPARENT 1
-  System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i"
-  ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND"
-  SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
-  !insertmacro MUI_INSTALLOPTIONS_SHOW
-FunctionEnd
-
-Function leaveSummary
-  ; Try to delete the app executable and if we can't delete it try to find the
-  ; app's message window and prompt the user to close the app. This allows
-  ; running an instance that is located in another directory. If for whatever
-  ; reason there is no message window we will just rename the app's files and
-  ; then remove them on restart.
-  ClearErrors
-  ${DeleteFile} "$INSTDIR\${FileMainEXE}"
-  ${If} ${Errors}
-    ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)"
-  ${EndIf}
-FunctionEnd
-
-; When we add an optional action to the finish page the cancel button is
-; enabled. This disables it and leaves the finish button as the only choice.
-Function preFinish
-  StrCpy $PageName ""
-  ${EndInstallLog} "${BrandFullName}"
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0"
-FunctionEnd
-
-################################################################################
-# Initialization Functions
-
-Function .onInit
-  StrCpy $PageName ""
-  StrCpy $LANGUAGE 0
-  ${SetBrandNameVars} "$EXEDIR\core\distribution\setup.ini"
-
-  ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OS_MSG)"
-
-  !insertmacro InitInstallOptionsFile "options.ini"
-  !insertmacro InitInstallOptionsFile "shortcuts.ini"
-  !insertmacro InitInstallOptionsFile "summary.ini"
-
-  ; Disable the Make Default IM Client for now...
-  WriteINIStr "$PLUGINSDIR\options.ini" "Settings" NumFields "5"
-
-;  ClearErrors
-;  ${If} ${AtLeastWinVista}
-;    WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
-;  ${EndIf}
-;  ${If} ${Errors}
-;    ; Setup the options.ini file for the Custom Options Page without the option
-;    ; to set as default for Vista and above since the installer is unable to
-;    ; write to HKLM.
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Settings" NumFields "5"
-;  ${Else}
-;    DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
-;    ; Setup the options.ini file for the Custom Options Page with the option
-;    ; to set as default
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Settings" NumFields "6"
-;
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" Type   "checkbox"
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" Text   "$(OPTIONS_MAKE_DEFAULT)"
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" Left   "0"
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" Right  "-1"
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" Top    "124"
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" Bottom "145"
-;    WriteINIStr "$PLUGINSDIR\options.ini" "Field 6" State  "1"
-;  ${EndIf}
-
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Type   "label"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Text   "$(OPTIONS_SUMMARY)"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Left   "0"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Top    "0"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Bottom "10"
-
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Type   "RadioButton"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Text   "$(OPTION_STANDARD_RADIO)"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Left   "15"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Top    "25"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Bottom "35"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" State  "1"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Flags  "GROUP"
-
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Type   "RadioButton"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Text   "$(OPTION_CUSTOM_RADIO)"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Left   "15"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Top    "55"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Bottom "65"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" State  "0"
-
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Type   "label"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Text   "$(OPTION_STANDARD_DESC)"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Left   "30"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Top    "37"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Bottom "57"
-
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Type   "label"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Text   "$(OPTION_CUSTOM_DESC)"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Left   "30"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Top    "67"
-  WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Bottom "87"
-
-  ; Setup the shortcuts.ini file for the Custom Shortcuts Page
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Settings" NumFields "4"
-
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Type   "label"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Text   "$(CREATE_ICONS_DESC)"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Left   "0"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Top    "5"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Bottom "15"
-
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Type   "checkbox"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Text   "$(ICONS_DESKTOP)"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Left   "15"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Top    "20"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Bottom "30"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" State  "1"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Flags  "GROUP"
-
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type   "checkbox"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text   "$(ICONS_STARTMENU)"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left   "15"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top    "40"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State  "1"
-
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Type   "checkbox"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Text   "$(ICONS_QUICKLAUNCH)"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Left   "15"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Top    "60"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Bottom "70"
-  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" State  "1"
-
-  ; There must always be a core directory.
-  ${GetSize} "$EXEDIR\core\" "/S=0K" $R5 $R7 $R8
-  IntOp $R8 $R5 + $R6
-  SectionSetSize ${APP_IDX} $R8
-
-  ; Initialize $hHeaderBitmap to prevent redundant changing of the bitmap if
-  ; the user clicks the back button
-  StrCpy $hHeaderBitmap ""
-FunctionEnd
-
-Function .onGUIEnd
-  ${OnEndCommon}
-FunctionEnd
deleted file mode 100755
--- a/im/installer/windows/nsis/shared.nsh
+++ /dev/null
@@ -1,440 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-!macro PostUpdate
-  ${CreateShortcutsLog}
-
-  ; Remove registry entries for non-existent apps and for apps that point to our
-  ; install location in the Software\Mozilla key and uninstall registry entries
-  ; that point to our install location for both HKCU and HKLM.
-  SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
-  ${RegCleanMain} "Software\Mozilla"
-  ${RegCleanUninstall}
-
-  ; setup the application model id registration value
-  ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
-
-  ClearErrors
-  WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
-  ${If} ${Errors}
-    StrCpy $TmpVal "HKCU" ; used primarily for logging
-  ${Else}
-    SetShellVarContext all    ; Set SHCTX to all users (e.g. HKLM)
-    DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
-    StrCpy $TmpVal "HKLM" ; used primarily for logging
-    ${RegCleanMain} "Software\Mozilla"
-    ${RegCleanUninstall}
-
-    ; Only update the Clients\IM registry key values if they don't exist or
-    ; this installation is the same as the one set in those keys.
-    ReadRegStr $0 HKLM "Software\Clients\IM\${ClientsRegName}\DefaultIcon" ""
-    ${GetPathFromString} "$0" $0
-    ${GetParent} "$0" $0
-    ${If} ${FileExists} "$0"
-      ${GetLongPath} "$0" $0
-    ${EndIf}
-    ${If} "$0" == "$INSTDIR"
-      ${SetClientsIM}
-    ${EndIf}
-  ${EndIf}
-
-  ${RemoveDeprecatedKeys}
-
-  ${SetAppKeys}
-  ${SetUninstallKeys}
-
-  ; Remove files that may be left behind by the application in the
-  ; VirtualStore directory.
-  ${CleanVirtualStore}
-
-  ; Register AccessibleHandler.dll with COM (this writes to HKLM)
-  ${RegisterAccessibleHandler}
-
-  ; Remove talkback if it is present (remove after bug 386760 is fixed)
-  ${If} ${FileExists} "$INSTDIR\extensions\talkback@mozilla.org\"
-    RmDir /r "$INSTDIR\extensions\talkback@mozilla.org\"
-  ${EndIf}
-!macroend
-!define PostUpdate "!insertmacro PostUpdate"
-
-!macro SetAsDefaultAppGlobal
-  ${RemoveDeprecatedKeys}
-
-  SetShellVarContext all      ; Set SHCTX to all users (e.g. HKLM)
-  ${SetClientsIM}
-  ${ShowShortcuts}
-  WriteRegStr HKLM "Software\Clients\IM" "" "${ClientsRegName}"
-!macroend
-!define SetAsDefaultAppGlobal "!insertmacro SetAsDefaultAppGlobal"
-
-; Removes shortcuts for this installation.
-!macro HideShortcuts
-  StrCpy $R1 "Software\Clients\IM\${ClientsRegName}\InstallInfo"
-  WriteRegDWORD HKLM "$R1" "IconsVisible" 0
-  SetShellVarContext all  ; Set $DESKTOP to All Users
-  ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
-    SetShellVarContext current  ; Set $DESKTOP to the current user's desktop
-  ${EndUnless}
-
-  ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
-    ShellLink::GetShortCutArgs "$DESKTOP\${BrandFullName}.lnk"
-    Pop $0
-    ${If} "$0" == ""
-      ShellLink::GetShortCutTarget "$DESKTOP\${BrandFullName}.lnk"
-      Pop $0
-      ; Needs to handle short paths
-      ${If} "$0" == "$INSTDIR\${FileMainEXE}"
-        Delete "$DESKTOP\${BrandFullName}.lnk"
-      ${EndIf}
-    ${EndIf}
-  ${EndIf}
-
-  ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
-    ShellLink::GetShortCutArgs "$QUICKLAUNCH\${BrandFullName}.lnk"
-    Pop $0
-    ${If} "$0" == ""
-      ShellLink::GetShortCutTarget "$QUICKLAUNCH\${BrandFullName}.lnk"
-      Pop $0
-      ; Needs to handle short paths
-      ${If} "$0" == "$INSTDIR\${FileMainEXE}"
-        Delete "$QUICKLAUNCH\${BrandFullName}.lnk"
-      ${EndIf}
-    ${EndIf}
-  ${EndIf}
-!macroend
-!define HideShortcuts "!insertmacro HideShortcuts"
-
-; Adds shortcuts for this installation.
-!macro ShowShortcuts
-  StrCpy $R1 "Software\Clients\IM\${ClientsRegName}\InstallInfo"
-  WriteRegDWORD HKLM "$R1" "IconsVisible" 1
-  SetShellVarContext all  ; Set $DESKTOP to All Users
-  ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
-    CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
-    ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR"
-    ${If} ${AtLeastWin7}
-    ${AndIf} "$AppUserModelID" != ""
-      ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID"
-    ${EndIf}
-    ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
-      SetShellVarContext current  ; Set $DESKTOP to the current user's desktop
-      ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
-        CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
-        ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR"
-        ${If} ${AtLeastWin7}
-        ${AndIf} "$AppUserModelID" != ""
-          ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID"
-        ${EndIf}
-      ${EndUnless}
-    ${EndUnless}
-  ${EndUnless}
-  ${Unless} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
-    CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
-    ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR"
-    ${If} ${AtLeastWin7}
-    ${AndIf} "$AppUserModelID" != ""
-      ApplicationID::Set "$QUICKLAUNCH\${BrandFullName}.lnk" "$AppUserModelID"
-    ${EndIf}
-  ${EndUnless}
-!macroend
-!define ShowShortcuts "!insertmacro ShowShortcuts"
-
-
-; Adds the HKLM\Software\Clients\IM\INSTANTBIRD.EXE registry
-; entries (does not use SHCTX).
-;
-; The values for StartMenuInternet are only valid under HKLM and there can only
-; be one installation registerred under StartMenuInternet per application since
-; the key name is derived from the main application executable.
-; http://support.microsoft.com/kb/297878
-;
-; Note: we might be able to get away with using the full path to the
-; application executable for the key name in order to support multiple
-; installations.
-!macro SetClientsIM
-  ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
-  ${GetLongPath} "$INSTDIR\uninstall\helper.exe" $7
-
-  StrCpy $0 "Software\Clients\IM\${ClientsRegName}"
-
-  WriteRegStr HKLM "$0" "" "${ClientsRegName}"
-  WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0"
-  WriteRegStr HKLM "$0" "DLLPath" "$6"
-  WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0"
-
-  ; The Reinstall Command is defined at
-  ; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/registeringapps.asp
-  WriteRegStr HKLM "$0\InstallInfo" "HideIconsCommand" "$\"$7$\" /HideShortcuts"
-  WriteRegStr HKLM "$0\InstallInfo" "ShowIconsCommand" "$\"$7$\" /ShowShortcuts"
-  WriteRegStr HKLM "$0\InstallInfo" "ReinstallCommand" "$\"$7$\" /SetAsDefaultAppGlobal"
-
-  ClearErrors
-  ReadRegDWORD $1 HKLM "$0\InstallInfo" "IconsVisible"
-  ; If the IconsVisible name value pair doesn't exist add it otherwise the
-  ; application won't be displayed in Set Program Access and Defaults.
-  ${If} ${Errors}
-    ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
-      WriteRegDWORD HKLM "$0\InstallInfo" "IconsVisible" 1
-    ${Else}
-      WriteRegDWORD HKLM "$0\InstallInfo" "IconsVisible" 0
-    ${EndIf}
-  ${EndIf}
-
-  WriteRegStr HKLM "$0\shell\open\command" "" "$8"
-
-  ; options
-  WriteRegStr HKLM "$0\shell\properties" "" "$(CONTEXT_OPTIONS)"
-  WriteRegStr HKLM "$0\shell\properties\command" "" "$\"$8$\" -preferences"
-
-  ; safemode
-  WriteRegStr HKLM "$0\shell\safemode" "" "$(CONTEXT_SAFE_MODE)"
-  WriteRegStr HKLM "$0\shell\safemode\command" "" "$\"$8$\" -safe-mode"
-
-  ; Vista Capabilities registry keys
-  WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)"
-  WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0"
-  WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${BrandShortName}"
-
-  ; Vista Registered Application
-  WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegName}" "$0\Capabilities"
-!macroend
-!define SetClientsIM "!insertmacro SetClientsIM"
-
-; Add Software\Mozilla\ registry entries (uses SHCTX).
-!macro SetAppKeys
-  ${GetLongPath} "$INSTDIR" $8
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main"
-  ${WriteRegStr2} $TmpVal "$0" "Install Directory" "$8" 0
-  ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0
-
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Uninstall"
-  ${WriteRegStr2} $TmpVal "$0" "Description" "${BrandFullNameInternal} (${AppVersion})" 0
-
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})"
-  ${WriteRegStr2} $TmpVal  "$0" "" "${AppVersion} (${AB_CD})" 0
-
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}\bin"
-  ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0
-
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}\extensions"
-  ${WriteRegStr2} $TmpVal "$0" "Components" "$8\components" 0
-  ${WriteRegStr2} $TmpVal "$0" "Plugins" "$8\plugins" 0
-
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}"
-  ${WriteRegStr2} $TmpVal "$0" "GeckoVer" "${GREVersion}" 0
-
-  StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}"
-  ${WriteRegStr2} $TmpVal "$0" "" "${GREVersion}" 0
-  ${WriteRegStr2} $TmpVal "$0" "CurrentVersion" "${AppVersion} (${AB_CD})" 0
-!macroend
-!define SetAppKeys "!insertmacro SetAppKeys"
-
-; Add uninstall registry entries. This macro tests for write access to determine
-; if the uninstall keys should be added to HKLM or HKCU.
-!macro SetUninstallKeys
-  StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} (${AppVersion})"
-
-  WriteRegStr HKLM "$0" "${BrandShortName}InstallerTest" "Write Test"
-  ${If} ${Errors}
-    StrCpy $1 "HKCU"
-    SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
-  ${Else}
-    StrCpy $1 "HKLM"
-    SetShellVarContext all     ; Set SHCTX to all users (e.g. HKLM)
-    DeleteRegValue HKLM "$0" "${BrandShortName}InstallerTest"
-  ${EndIf}
-
-  ${GetLongPath} "$INSTDIR" $8
-
-  ; Write the uninstall registry keys
-  ${WriteRegStr2} $1 "$0" "Comments" "${BrandFullNameInternal}" 0
-  ${WriteRegStr2} $1 "$0" "DisplayIcon" "$8\${FileMainEXE},0" 0
-  ${WriteRegStr2} $1 "$0" "DisplayName" "${BrandFullNameInternal} (${AppVersion})" 0
-  ${WriteRegStr2} $1 "$0" "DisplayVersion" "${AppVersion} (${AB_CD})" 0
-  ${WriteRegStr2} $1 "$0" "InstallLocation" "$8" 0
-  ${WriteRegStr2} $1 "$0" "Publisher" "Instantbird" 0
-  ${WriteRegStr2} $1 "$0" "UninstallString" "$8\uninstall\helper.exe" 0
-  ${WriteRegStr2} $1 "$0" "URLInfoAbout" "${URLInfoAbout}" 0
-  ${WriteRegStr2} $1 "$0" "URLUpdateInfo" "${URLUpdateInfo}" 0
-  ${WriteRegDWORD2} $1 "$0" "NoModify" 1 0
-  ${WriteRegDWORD2} $1 "$0" "NoRepair" 1 0
-
-  ${If} "$TmpVal" == "HKLM"
-    SetShellVarContext all     ; Set SHCTX to all users (e.g. HKLM)
-  ${Else}
-    SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
-  ${EndIf}
-!macroend
-!define SetUninstallKeys "!insertmacro SetUninstallKeys"
-
-!macro RegisterAccessibleHandler
-  ${RegisterDLL} "$INSTDIR\AccessibleHandler.dll"
-!macroend
-!define RegisterAccessibleHandler "!insertmacro RegisterAccessibleHandler"
-
-; Removes various registry entries for reasons noted below (does not use SHCTX).
-!macro RemoveDeprecatedKeys
-  ; Remove the app compatibility registry key
-  StrCpy $0 "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
-  DeleteRegValue HKLM "$0" "$INSTDIR\${FileMainEXE}"
-  DeleteRegValue HKCU "$0" "$INSTDIR\${FileMainEXE}"
-
-!macroend
-!define RemoveDeprecatedKeys "!insertmacro RemoveDeprecatedKeys"
-
-; Creates the shortcuts log ini file with the appropriate entries if it doesn't
-; already exist.
-!macro CreateShortcutsLog
-  ${GetShortcutsLogPath} $0
-  ${Unless} ${FileExists} "$0"
-    ; Default to ${BrandFullName} for the Start Menu Folder
-    StrCpy $TmpVal "${BrandFullName}"
-    ; Prior to Unicode installer the Start Menu directory was written to the
-    ; registry and this value can be used to set the Start Menu directory.
-    ClearErrors
-    ReadRegStr $0 SHCTX "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main" "Start Menu Folder"
-    ${If} ${Errors}
-      ${FindSMProgramsDir} $0
-      ${If} "$0" != ""
-        StrCpy $TmpVal "$0"
-      ${EndIf}
-    ${Else}
-      StrCpy $TmpVal "$0"
-    ${EndUnless}
-
-    ${LogSMProgramsDirRelPath} "$TmpVal"
-    ${LogSMProgramsShortcut} "${BrandFullName}.lnk"
-    ${LogSMProgramsShortcut} "${BrandFullName} ($(SAFE_MODE)).lnk"
-    ${LogQuickLaunchShortcut} "${BrandFullName}.lnk"
-    ${LogDesktopShortcut} "${BrandFullName}.lnk"
-  ${EndUnless}
-!macroend
-!define CreateShortcutsLog "!insertmacro CreateShortcutsLog"
-
-; The files to check if they are in use during (un)install so the restart is
-; required message is displayed. All files must be located in the $INSTDIR
-; directory.
-!macro PushFilesToCheck
-  ; The first string to be pushed onto the stack MUST be "end" to indicate
-  ; that there are no more files to check in $INSTDIR and the last string
-  ; should be ${FileMainEXE} so if it is in use the CheckForFilesInUse macro
-  ; returns after the first check.
-  Push "end"
-  Push "AccessibleHandler.dll"
-  Push "AccessibleMarshal.dll"
-  Push "IA2Marshal.dll"
-  Push "freebl3.dll"
-  Push "nssckbi.dll"
-  Push "nspr4.dll"
-  Push "nssdbm3.dll"
-  Push "sqlite3.dll"
-  Push "mozsqlite3.dll"
-  Push "xpcom.dll"
-  Push "crashreporter.exe"
-  Push "minidump-analyzer.exe"
-  Push "pingsender.exe"
-  Push "updater.exe"
-  Push "xpicleanup.exe"
-  Push "${FileMainEXE}"
-!macroend
-!define PushFilesToCheck "!insertmacro PushFilesToCheck"
-
-
-; Sets this installation as the default IM app by setting the registry keys
-; under HKEY_CURRENT_USER via registry calls and using the AppAssocReg NSIS
-; plugin for Vista and above. This is a function instead of a macro so it is
-; easily called from an elevated instance of the binary. Since this can be
-; called by an elevated instance logging is not performed in this function.
-Function SetAsDefaultAppUserHKCU
-  ; Only set as the user's IM app if the IM
-  ; registry keys are for this install.
-  ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
-  ClearErrors
-  ReadRegStr $0 HKLM "Software\Clients\IM\$R9\DefaultIcon" ""
-  ${Unless} ${Errors}
-    ${GetPathFromString} "$0" $0
-    ${GetParent} "$0" $0
-    ${If} ${FileExists} "$0"
-      ${GetLongPath} "$0" $0
-      ${If} "$0" == "$INSTDIR"
-        WriteRegStr HKCU "Software\Clients\IM" "" "$R9"
-      ${EndIf}
-    ${EndIf}
-  ${EndUnless}
-
-  SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
-
-  ${If} ${AtLeastWinVista}
-    ; Only register as the handler on Vista and above if the app registry name
-    ; exists under the RegisteredApplications registry key. The protocol and
-    ; file handlers set previously at the user level will associate this install
-    ; as the default browser.
-    ClearErrors
-    ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegName}"
-    ${Unless} ${Errors}
-      AppAssocReg::SetAppAsDefaultAll "${AppRegName}"
-    ${EndUnless}
-  ${EndIf}
-  ${RemoveDeprecatedKeys}
-FunctionEnd
-
-; The !ifdef NO_LOG prevents warnings when compiling the installer.nsi due to
-; this function only being used by the uninstaller.nsi.
-!ifdef NO_LOG
-
-Function SetAsDefaultAppUser
-  ; It is only possible to set this installation of the application as the
-  ; StartMenuInternet handler if it was added to the HKLM StartMenuInternet
-  ; registry keys.
-  ; http://support.microsoft.com/kb/297878
-
-  ; Check if this install location registered as the StartMenuInternet client
-  ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
-  ClearErrors
-  ReadRegStr $0 HKLM "Software\Clients\IM\$R9\DefaultIcon" ""
-  ${Unless} ${Errors}
-    ${GetPathFromString} "$0" $0
-    ${GetParent} "$0" $0
-    ${If} ${FileExists} "$0"
-      ${GetLongPath} "$0" $0
-      ${If} "$0" == "$INSTDIR"
-        ; Check if this is running in an elevated process
-        ClearErrors
-        ${GetParameters} $0
-        ${GetOptions} "$0" "/UAC:" $0
-        ${If} ${Errors} ; Not elevated
-          Call SetAsDefaultAppUserHKCU
-        ${Else} ; Elevated - execute the function in the unelevated process
-          GetFunctionAddress $0 SetAsDefaultAppUserHKCU
-          UAC::ExecCodeSegment $0
-        ${EndIf}
-        Return ; Nothing more needs to be done
-      ${EndIf}
-    ${EndIf}
-  ${EndUnless}
-
-  ; The code after ElevateUAC won't be executed on Vista and above when the
-  ; user:
-  ; a) is a member of the administrators group (e.g. elevation is required)
-  ; b) is not a member of the administrators group and chooses to elevate
-  ${ElevateUAC}
-
-  ${SetClientsIM}
-
-  SetShellVarContext all  ; Set SHCTX to all users (e.g. HKLM)
-  ${RemoveDeprecatedKeys}
-
-  ClearErrors
-  ${GetParameters} $0
-  ${GetOptions} "$0" "/UAC:" $0
-  ${If} ${Errors}
-    Call SetAsDefaultAppUserHKCU
-  ${Else}
-    GetFunctionAddress $0 SetAsDefaultAppUserHKCU
-    UAC::ExecCodeSegment $0
-  ${EndIf}
-FunctionEnd
-!define SetAsDefaultAppUser "Call SetAsDefaultAppUser"
-
-!endif
deleted file mode 100755
--- a/im/installer/windows/nsis/uninstaller.nsi
+++ /dev/null
@@ -1,553 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Required Plugins:
-# AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in
-# CityHash    http://mxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash
-# ShellLink   http://nsis.sourceforge.net/ShellLink_plug-in
-# UAC         http://nsis.sourceforge.net/UAC_plug-in
-
-; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs
-!verbose 3
-
-; 7-Zip provides better compression than the lzma from NSIS so we add the files
-; uncompressed and use 7-Zip to create a SFX archive of it
-SetDatablockOptimize on
-SetCompress off
-CRCCheck on
-
-RequestExecutionLevel user
-
-; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can
-; be removed after we require NSIS 3.0a2 or greater.
-!ifdef NSIS_PACKEDVERSION
-  Unicode true
-  ManifestSupportedOS all
-  ManifestDPIAware true
-!endif
-
-!addplugindir ./
-
-; On Vista and above attempt to elevate Standard Users in addition to users that
-; are a member of the Administrators group.
-!define NONADMIN_ELEVATE
-
-; prevents compiling of the reg write logging.
-!define NO_LOG
-
-Var TmpVal
-
-; Other included files may depend upon these includes!
-; The following includes are provided by NSIS.
-!include FileFunc.nsh
-!include LogicLib.nsh
-!include MUI.nsh
-!include WinMessages.nsh
-!include WinVer.nsh
-!include WordFunc.nsh
-
-!insertmacro StrFilter
-!insertmacro WordReplace
-
-!insertmacro un.GetParent
-
-; The following includes are custom.
-!include branding.nsi
-!include defines.nsi
-!include common.nsh
-!include locales.nsi
-
-; This is named BrandShortName helper because we use this for software update
-; post update cleanup.
-VIAddVersionKey "FileDescription" "${BrandShortName} Helper"
-VIAddVersionKey "OriginalFilename" "helper.exe"
-
-; Most commonly used macros for managing shortcuts
-!insertmacro _LoggingShortcutsCommon
-
-!insertmacro CleanVirtualStore
-!insertmacro ElevateUAC
-!insertmacro FindSMProgramsDir
-!insertmacro GetLongPath
-!insertmacro GetPathFromString
-!insertmacro InitHashAppModelId
-!insertmacro RegCleanMain
-!insertmacro RegCleanUninstall
-!insertmacro SetBrandNameVars
-!insertmacro UnloadUAC
-!insertmacro UpdateShortcutAppModelIDs
-!insertmacro WriteRegDWORD2
-!insertmacro WriteRegStr2
-
-!insertmacro un.ChangeMUIHeaderImage
-!insertmacro un.CheckForFilesInUse
-!insertmacro un.CleanUpdatesDir
-!insertmacro un.CleanVirtualStore
-!insertmacro un.DeleteRelativeProfiles
-!insertmacro un.DeleteShortcuts
-!insertmacro un.GetLongPath
-!insertmacro un.GetSecondInstallPath
-!insertmacro un.InitHashAppModelId
-!insertmacro un.ManualCloseAppPrompt
-!insertmacro un.ParseUninstallLog
-!insertmacro un.RegCleanMain
-!insertmacro un.RegCleanUninstall
-!insertmacro un.RemoveQuotesFromPath
-!insertmacro un.SetBrandNameVars
-
-!include shared.nsh
-
-; Helper macros for ui callbacks. Insert these after shared.nsh
-!insertmacro OnEndCommon
-!insertmacro UninstallOnInitCommon
-
-!insertmacro un.OnEndCommon
-
-Name "${BrandFullName}"
-OutFile "helper.exe"
-InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} (${AppVersion})" "InstallLocation"
-InstallDir "$PROGRAMFILES\${BrandFullName}"
-ShowUnInstDetails nevershow
-
-################################################################################
-# Modern User Interface - MUI
-
-!define MUI_ABORTWARNING
-!define MUI_ICON setup.ico
-!define MUI_UNICON setup.ico
-!define MUI_WELCOMEPAGE_TITLE_3LINES
-!define MUI_HEADERIMAGE
-!define MUI_HEADERIMAGE_RIGHT
-!define MUI_UNWELCOMEFINISHPAGE_BITMAP wizWatermark.bmp
-
-; Use a right to left header image when the language is right to left
-!ifdef ${AB_CD}_rtl
-!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp
-!else
-!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp
-!endif
-
-/**
- * Uninstall Pages
- */
-; Welcome Page
-!define MUI_PAGE_CUSTOMFUNCTION_PRE un.preWelcome
-!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.leaveWelcome
-!insertmacro MUI_UNPAGE_WELCOME
-
-; Custom Uninstall Confirm Page
-UninstPage custom un.preConfirm un.leaveConfirm
-
-; Remove Files Page
-!insertmacro MUI_UNPAGE_INSTFILES
-
-; Finish Page
-
-; Don't setup the survey controls, functions, etc. when the application has
-; defined NO_UNINSTALL_SURVEY
-!ifndef NO_UNINSTALL_SURVEY
-!define MUI_PAGE_CUSTOMFUNCTION_PRE un.preFinish
-!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
-!define MUI_FINISHPAGE_SHOWREADME ""
-!define MUI_FINISHPAGE_SHOWREADME_TEXT $(SURVEY_TEXT)
-!define MUI_FINISHPAGE_SHOWREADME_FUNCTION un.Survey
-!endif
-
-!insertmacro MUI_UNPAGE_FINISH
-
-; Use the default dialog for IDD_VERIFY for a simple Banner
-ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe"
-
-################################################################################
-# Install Sections
-; Empty section required for the installer to compile as an uninstaller
-Section ""
-SectionEnd
-
-################################################################################
-# Uninstall Sections
-
-Section "Uninstall"
-  SetDetailsPrint textonly
-  DetailPrint $(STATUS_UNINSTALL_MAIN)
-  SetDetailsPrint none
-
-  ; Delete the app exe to prevent launching the app while we are uninstalling.
-  ClearErrors
-  ${DeleteFile} "$INSTDIR\${FileMainEXE}"
-  ${If} ${Errors}
-    ; If the user closed the application it can take several seconds for it to
-    ; shut down completely. If the application is being used by another user we
-    ; can still delete the files when the system is restarted. 
-    Sleep 5000
-    ${DeleteFile} "$INSTDIR\${FileMainEXE}"
-    ClearErrors
-  ${EndIf}
-
-  ; setup the application model id registration value
-  ${un.InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
-
-  ${MUI_INSTALLOPTIONS_READ} $0 "unconfirm.ini" "Field 3" "State"
-  ${If} "$0" == "1"
-    ${un.DeleteRelativeProfiles} "Instantbird"
-  ${EndIf}
-
-  SetShellVarContext current  ; Set SHCTX to HKCU
-  ${un.RegCleanMain} "Software\Mozilla"
-  ${un.RegCleanUninstall}
-  ${un.DeleteShortcuts}
-
-  ClearErrors
-  WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
-  ${If} ${Errors}
-    StrCpy $TmpVal "HKCU" ; used primarily for logging
-  ${Else}
-    SetShellVarContext all  ; Set SHCTX to HKLM
-    DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
-    StrCpy $TmpVal "HKLM" ; used primarily for logging
-    ${un.RegCleanMain} "Software\Mozilla"
-    ${un.RegCleanUninstall}
-    ${un.DeleteShortcuts}
-  ${EndIf}
-
-  ; Unregister resources associated with Win7 taskbar jump lists.
-  ${If} "$AppUserModelID" != ""
-  ${AndIf} ${AtLeastWin7}
-    ApplicationID::UninstallJumpLists "$AppUserModelID"
-  ${EndIf}
-
-  ; Remove any app model id's stored in the registry for this install path
-  DeleteRegValue HKCU "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR"
-  DeleteRegValue HKLM "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR"
-
-  ClearErrors
-
-  SetShellVarContext all  ; Set SHCTX to HKLM
-  ${un.GetSecondInstallPath} "Software\Mozilla" $R9
-  ${If} $R9 == "false"
-    SetShellVarContext current  ; Set SHCTX to HKCU
-    ${un.GetSecondInstallPath} "Software\Mozilla" $R9
-  ${EndIf}
-
-  StrCpy $0 "Software\Clients\IM\${ClientsRegName}\shell\open\command"
-  ReadRegStr $R1 HKLM "$0" ""
-  ${un.RemoveQuotesFromPath} "$R1" $R1
-  ${un.GetParent} "$R1" $R1
-
-  ; Only remove the IM key if it refers to this install location.
-  ; The IM registry key is independent of the default IM app
-  ; settings. The XPInstall base un-installer always removes this key if it is
-  ; uninstalling the default browser and it will always replace the keys when
-  ; installing even if there is another install of Instantbird that is set as the
-  ; default IM app. Now the key is always updated on install but it is only
-  ; removed if it refers to this install location.
-  ${If} "$INSTDIR" == "$R1"
-    DeleteRegKey HKLM "Software\Clients\IM\${ClientsRegName}"
-    DeleteRegValue HKLM "Software\RegisteredApplications" "${AppRegName}"
-  ${EndIf}
-
-  StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}"
-  ${If} $R9 == "false"
-    DeleteRegKey HKLM "$0"
-    DeleteRegKey HKCU "$0"
-  ${Else}
-    ReadRegStr $R1 HKLM "$0" ""
-    ${un.RemoveQuotesFromPath} "$R1" $R1
-    ${un.GetParent} "$R1" $R1
-    ${If} "$INSTDIR" == "$R1"
-      WriteRegStr HKLM "$0" "" "$R9"
-      ${un.GetParent} "$R9" $R1
-      WriteRegStr HKLM "$0" "Path" "$R1"
-    ${EndIf}
-  ${EndIf}
-
-  ; Remove directories and files we always control before parsing the uninstall
-  ; log so empty directories can be removed.
-  ${If} ${FileExists} "$INSTDIR\updates"
-    RmDir /r /REBOOTOK "$INSTDIR\updates"
-  ${EndIf}
-  ${If} ${FileExists} "$INSTDIR\defaults\shortcuts"
-    RmDir /r /REBOOTOK "$INSTDIR\defaults\shortcuts"
-  ${EndIf}
-  ${If} ${FileExists} "$INSTDIR\distribution"
-    RmDir /r /REBOOTOK "$INSTDIR\distribution"
-  ${EndIf}
-  ${If} ${FileExists} "$INSTDIR\removed-files"
-    Delete /REBOOTOK "$INSTDIR\removed-files"
-  ${EndIf}
-
-  ; Remove the updates directory for Vista and above
-  ${un.CleanUpdatesDir} "Instantbird"
-
-  ; Remove files that may be left behind by the application in the
-  ; VirtualStore directory.
-  ${un.CleanVirtualStore}
-
-  ; Only unregister the dll if the registration points to this installation
-  ReadRegStr $R1 HKCR "CLSID\{0D68D6D0-D93D-4D08-A30D-F00DD1F45B24}\InProcServer32" ""
-  ${If} "$INSTDIR\AccessibleMarshal.dll" == "$R1"
-    ${UnregisterDLL} "$INSTDIR\AccessibleMarshal.dll"
-  ${EndIf}
-
-  ; Only unregister the dll if the registration points to this installation
-  ReadRegStr $R1 HKCR "CLSID\${AccessibleHandlerCLSID}\InprocHandler32" ""
-  ${If} "$INSTDIR\AccessibleHandler.dll" == "$R1"
-    ${UnregisterDLL} "$INSTDIR\AccessibleHandler.dll"
-  ${EndIf}
-
-  ; Parse the uninstall log to unregister dll's and remove all installed
-  ; files / directories this install is responsible for.
-  ${un.ParseUninstallLog}
-
-  ; Remove the uninstall directory that we control
-  RmDir /r /REBOOTOK "$INSTDIR\uninstall"
-
-  ; Remove the installation directory if it is empty
-  ${RemoveDir} "$INSTDIR"
-
-  ; If instantbird.exe was successfully deleted yet we still need to restart to
-  ; remove other files create a dummy instantbird.exe.moz-delete to prevent the
-  ; installer from allowing an install without restart when it is required
-  ; to complete an uninstall.
-  ${If} ${RebootFlag}
-    ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-delete"
-      FileOpen $0 "$INSTDIR\${FileMainEXE}.moz-delete" w
-      FileWrite $0 "Will be deleted on restart"
-      Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
-      FileClose $0
-    ${EndUnless}
-  ${EndIf}
-
-  ; Refresh desktop icons otherwise the start menu internet item won't be
-  ; removed and other ugly things will happen like recreation of the app's
-  ; clients registry key by the OS under some conditions.
-  System::Call "shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)"
-SectionEnd
-
-################################################################################
-# Helper Functions
-
-; Don't setup the survey controls, functions, etc. when the application has
-; defined NO_UNINSTALL_SURVEY
-!ifndef NO_UNINSTALL_SURVEY
-Function un.Survey
-  Exec "$\"$TmpVal$\" $\"${SurveyURL}$\""
-FunctionEnd
-!endif
-
-################################################################################
-# Language
-
-!insertmacro MOZ_MUI_LANGUAGE 'baseLocale'
-!verbose push
-!verbose 3
-!include "overrideLocale.nsh"
-!include "customLocale.nsh"
-!verbose pop
-
-; Set this after the locale files to override it if it is in the locale. Using
-; " " for BrandingText will hide the "Nullsoft Install System..." branding.
-BrandingText " "
-
-################################################################################
-# Page pre, show, and leave functions
-
-Function un.preWelcome
-  ${If} ${FileExists} "$INSTDIR\distribution\modern-wizard.bmp"
-    Delete "$PLUGINSDIR\modern-wizard.bmp"
-    CopyFiles /SILENT "$INSTDIR\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp"
-  ${EndIf}
-FunctionEnd
-
-Function un.leaveWelcome
-  ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
-    Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)"
-
-    ; If the message window has been found previously give the app an additional
-    ; five seconds to close.
-    ${If} "$TmpVal" == "FoundMessageWindow"
-      Sleep 5000
-    ${EndIf}
-
-    ${PushFilesToCheck}
-
-    ${un.CheckForFilesInUse} $TmpVal
-
-    Banner::destroy
-
-    ; If there are files in use $TmpVal will be "true"
-    ${If} "$TmpVal" == "true"
-      ; If the message window is found the call to ManualCloseAppPrompt will
-      ; abort leaving the value of $TmpVal set to "FoundMessageWindow".
-      StrCpy $TmpVal "FoundMessageWindow"
-      ${un.ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_UNINSTALL)"
-      ; If the message window is not found set $TmpVal to "true" so the restart
-      ; required message is displayed.
-      StrCpy $TmpVal "true"
-    ${EndIf}
-  ${EndIf}
-FunctionEnd
-
-Function un.preConfirm
-  ${If} ${FileExists} "$INSTDIR\distribution\modern-header.bmp"
-  ${AndIf} $hHeaderBitmap == ""
-    Delete "$PLUGINSDIR\modern-header.bmp"
-    CopyFiles /SILENT "$INSTDIR\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp"
-    ${un.ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp"
-  ${EndIf}
-
-  ; Setup the unconfirm.ini file for the Custom Uninstall Confirm Page
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Settings" NumFields "5"
-
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Type   "label"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Text   "$(UN_CONFIRM_UNINSTALLED_FROM)"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Left   "0"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Top    "5"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Bottom "15"
-
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Type   "text"
-  ; The contents of this control must be set as follows in the pre function
-  ; ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 2" "HWND"
-  ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" State  ""
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Left   "0"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Top    "17"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Bottom "30"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" flags  "READONLY"
-
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Type   "checkbox"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Text   "$(UN_REMOVE_PROFILES)"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Left   "0"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Top    "40"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Bottom "50"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" State  "0"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" flags  "NOTIFY"
-
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Type   "text"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" State   "$(UN_REMOVE_PROFILES_DESC)"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Left   "0"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Top    "52"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Bottom "120"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" flags  "MULTILINE|READONLY"
-
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 5" Type   "label"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 5" Text   "$(UN_CONFIRM_CLICK)"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 5" Left   "0"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 5" Right  "-1"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 5" Top    "130"
-  WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 5" Bottom "150"
-
-  ${If} "$TmpVal" == "true"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 6" Type   "label"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 6" Text   "$(SUMMARY_REBOOT_REQUIRED_UNINSTALL)"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 6" Left   "0"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 6" Right  "-1"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 6" Top    "35"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 6" Bottom "45"
-
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Settings" NumFields "6"
-
-    ; To insert this control reset Top / Bottom for controls below this one
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Top    "55"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Bottom "65"
-    WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Top    "67"
-  ${EndIf}
-
-  !insertmacro MUI_HEADER_TEXT "$(UN_CONFIRM_PAGE_TITLE)" "$(UN_CONFIRM_PAGE_SUBTITLE)"
-  ; The Summary custom page has a textbox that will automatically receive
-  ; focus. This sets the focus to the Install button instead.
-  !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "unconfirm.ini"
-  GetDlgItem $0 $HWNDPARENT 1
-  ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 4" "HWND"
-  SetCtlColors $1 0x000000 0xFFFFEE
-  ShowWindow $1 ${SW_HIDE}
-  System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i"
-  ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 2" "HWND"
-  SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
-  !insertmacro MUI_INSTALLOPTIONS_SHOW
-FunctionEnd
-
-Function un.leaveConfirm
-  ${MUI_INSTALLOPTIONS_READ} $0 "unconfirm.ini" "Settings" "State"
-  StrCmp $0 "3" +1 continue
-  ${MUI_INSTALLOPTIONS_READ} $0 "unconfirm.ini" "Field 3" "State"
-  ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 4" "HWND"
-  StrCmp $0 1 +1 +3
-  ShowWindow $1 ${SW_SHOW}
-  Abort
-
-  ShowWindow $1 ${SW_HIDE}
-  Abort
-
-  continue:
-
-  ; Try to delete the app executable and if we can't delete it try to find the
-  ; app's message window and prompt the user to close the app. This allows
-  ; running an instance that is located in another directory. If for whatever
-  ; reason there is no message window we will just rename the app's files and
-  ; then remove them on restart if they are in use.
-  ClearErrors
-  ${DeleteFile} "$INSTDIR\${FileMainEXE}"
-  ${If} ${Errors}
-    ${un.ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_UNINSTALL)"
-  ${EndIf}
-FunctionEnd
-
-!ifndef NO_UNINSTALL_SURVEY
-Function un.preFinish
-  ; Do not modify the finish page if there is a reboot pending
-  ${Unless} ${RebootFlag}
-    ; Don't display the option to take a survey on the finish page if the OS is
-    ; Vista or above since the process will be running elevated.
-    ${If} ${AtLeastWinVista}
-      !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "NumFields" "3"
-    ${Else}
-      ; When we add an optional action to the finish page the cancel button
-      ; is enabled. This disables it and leaves the finish button as the
-      ; only choice.
-      !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0"
-    ${EndIf}
-  ${EndUnless}
-FunctionEnd
-!endif
-
-################################################################################
-# Initialization Functions
-
-Function .onInit
-  ; We need this set up for most of the helper.exe operations.
-  !ifdef AppName
-  ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
-  !endif
-  ${UninstallOnInitCommon}
-FunctionEnd
-
-Function un.onInit
-  ${un.GetParent} "$INSTDIR" $INSTDIR
-  ${un.GetLongPath} "$INSTDIR" $INSTDIR
-  ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}"
-    Abort
-  ${EndUnless}
-
-  StrCpy $LANGUAGE 0
-  ${un.SetBrandNameVars} "$INSTDIR\distribution\setup.ini"
-
-  ; Initialize $hHeaderBitmap to prevent redundant changing of the bitmap if
-  ; the user clicks the back button
-  StrCpy $hHeaderBitmap ""
-
-  !insertmacro InitInstallOptionsFile "unconfirm.ini"
-FunctionEnd
-
-Function .onGUIEnd
-  ${OnEndCommon}
-FunctionEnd
-
-Function un.onGUIEnd
-  ${un.OnEndCommon}
-FunctionEnd
deleted file mode 100644
--- a/im/installer/windows/nsis/updater_append.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-
-; IMPORTANT: This file should always start with a newline in case a locale
-; provided updater.ini does not end with a newline.
-; Application to launch after an update has been successfully applied. This
-; must be in the same directory or a sub-directory of the directory of the
-; application executable that initiated the software update.
-[PostUpdateWin]
-; ExeRelPath is the path to the PostUpdateWin executable relative to the
-; application executable.
-ExeRelPath=uninstall\helper.exe
-; ExeArg is the argument to pass to the PostUpdateWin exe
-ExeArg=/PostUpdate
deleted file mode 100644
--- a/im/locales/Makefile.in
+++ /dev/null
@@ -1,215 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-include $(moztopsrcdir)/config/config.mk
-
-_ABS_SRCDIR := $(abspath $(commtopsrcdir))
-
-ifndef MOZ_BRANDING_DIRECTORY
-MOZ_BRANDING_DIRECTORY = im/branding/nightly
-endif
-
-SUBMAKEFILES += \
-	$(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/Makefile \
-	$(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales/Makefile \
-	$(NULL)
-
-# This makefile uses variable overrides from the libs-% target to
-# build non-default locales to non-default dist/ locations. Be aware!
-
-PWD := $(CURDIR)
-
-# These are defaulted to be compatible with the files the wget-en-US target
-# pulls. You may override them if you provide your own files.
-ZIP_IN ?= $(ABS_DIST)/$(PACKAGE)
-WIN32_INSTALLER_IN ?= $(ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe
-RETRIEVE_WINDOWS_INSTALLER = 1
-
-MOZ_LANGPACK_EID=langpack-$(AB_CD)@addons.instantbird.org
-
-L10N_PREF_JS_EXPORTS = $(call MERGE_FILE,all-l10n.js)
-L10N_PREF_JS_EXPORTS_PATH = $(FINAL_TARGET)/$(PREF_DIR)
-L10N_PREF_JS_EXPORTS_FLAGS = $(PREF_PPFLAGS) --silence-missing-directive-warnings
-PP_TARGETS += L10N_PREF_JS_EXPORTS
-
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-MOZ_PKG_MAC_DSSTORE=$(ABS_DIST)/branding/dsstore
-MOZ_PKG_MAC_BACKGROUND=$(ABS_DIST)/branding/background.png
-MOZ_PKG_MAC_ICON=$(ABS_DIST)/branding/disk.icns
-MOZ_PKG_MAC_EXTRA=--symlink "/Applications:/ "
-endif
-
-MOZ_SFX_PACKAGE=$(commtopsrcdir)/other-licenses/7zstub/instantbird/7zSD.sfx
-MOZ_INSTALLER_PATH=$(commtopsrcdir)/im/installer/windows
-
-ifeq (WINNT,$(OS_ARCH))
-UNINSTALLER_PACKAGE_HOOK = $(RM) -r $(STAGEDIST)/uninstall; \
-    $(NSINSTALL) -D $(STAGEDIST)/uninstall; \
-    cp ../installer/windows/l10ngen/helper.exe $(STAGEDIST)/uninstall; \
-    $(RM) $(ABS_DIST)/l10n-stage/setup.exe; \
-    cp ../installer/windows/l10ngen/setup.exe $(ABS_DIST)/l10n-stage; \
-    $(NULL)
-endif
-
-SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt))
-SEARCHPLUGINS_FILENAMES = $(subst :hidden,,$(SEARCHPLUGINS_NAMES))
-SEARCHPLUGINS_PATH := .deps/generated_$(AB_CD)
-SEARCHPLUGINS_TARGET := libs searchplugins
-SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_FILENAMES)),$(or $(wildcard $(call EN_US_OR_L10N_FILE,searchplugins/$(plugin))),$(warning Missing searchplugin: $(plugin))))
-# Some locale-specific search plugins may have preprocessor directives, but the
-# default en-US ones do not.
-SEARCHPLUGINS_FLAGS := --silence-missing-directive-warnings
-PP_TARGETS += SEARCHPLUGINS
-
-list-txt = $(SEARCHPLUGINS_PATH)/list.txt
-GARBAGE += $(list-txt)
-
-libs:: searchplugins
-
-include $(moztopsrcdir)/config/rules.mk
-
-include $(moztopsrcdir)/toolkit/locales/l10n.mk
-
-$(list-txt): $(call mkdir_deps,$(SEARCHPLUGINS_PATH)) $(if $(IS_LANGUAGE_REPACK),FORCE)
-	$(RM) $(list-txt)
-	$(foreach plugin,$(SEARCHPLUGINS_NAMES),printf '$(plugin)\n' >> $(list-txt);)
-searchplugins:: $(list-txt)
-
-# Remove installer/sea/ from installer paths.
-PKG_INST_PATH =
-
-$(DIST)/branding:
-	$(NSINSTALL) -D $@
-
-libs-%:
-	$(NSINSTALL) -D $(DIST)/install
-	@$(MAKE) -C $(DEPTH)/toolkit/locales libs-$*
-	@$(MAKE) -C ../../chat/locales AB_CD=$* XPI_NAME=locale-$*
-	@$(MAKE) -C $(DEPTH)/extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
-	@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
-	@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=defaults/pref
-	@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
-
-
-# Note the funny extra "../" in SFX_HEADER is because the repackage-zip command
-# is actually run effectively from within the mozilla/ part of the objdir, so
-# topsrcdir points to the wrong place and we have to go one directory higher.
-repackage-win32-installer: WIN32_INSTALLER_OUT="$(ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe"
-repackage-win32-installer: $(WIN32_INSTALLER_IN) $(SUBMAKEFILES)
-	@echo "Repackaging $(WIN32_INSTALLER_IN) into $(WIN32_INSTALLER_OUT)."
-	$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY) export
-	$(MAKE) -C ../installer/windows CONFIG_DIR=l10ngen l10ngen/setup.exe l10ngen/7zSD.sfx
-	$(MAKE) repackage-zip \
-	  AB_CD=$(AB_CD) \
-	  MOZ_PKG_FORMAT=SFX7Z \
-	  ZIP_IN=$(WIN32_INSTALLER_IN) \
-	  ZIP_OUT=$(WIN32_INSTALLER_OUT) \
-	  SFX_HEADER="$(PWD)/../installer/windows/l10ngen/7zSD.sfx \
-	              $(_ABS_SRCDIR)/im/installer/windows/app.tag"
-
-ifeq (WINNT,$(OS_ARCH))
-repackage-win32-installer-%: $(WIN32_INSTALLER_IN) libs-% unpack
-	@$(MAKE) repackage-win32-installer AB_CD=$* WIN32_INSTALLER_IN=$(WIN32_INSTALLER_IN)
-else
-repackage-win32-installer-%: ;
-endif
-
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-STAGEDIST = $(ABS_DIST)/l10n-stage/$(MOZ_PKG_APPNAME)/$(_APPNAME)/Contents/MacOS
-else
-STAGEDIST = $(ABS_DIST)/l10n-stage/$(MOZ_PKG_DIR)
-endif
-
-# During repackaging, we never have an universal/ subfolder.
-STAGEPATH =
-
-langpack: langpack-$(AB_CD)
-
-# This is a generic target that will make a langpack, repack ZIP (+tarball)
-# builds, and repack and installer if applicable. It is called from the
-# tinderbox scripts. Alter it with caution.
-
-installers-%: clobber-% langpack-% repackage-win32-installer-% repackage-zip-%
-	@echo "repackaging done"
-
-ifdef MOZ_UPDATER
-libs:: $(call MERGE_FILE,updater/updater.ini) $(call mkdir_deps,$(DIST)/bin)
-ifeq ($(OS_ARCH),WINNT)
-	cat $< $(srcdir)/../installer/windows/nsis/updater_append.ini | \
-	  sed -e "s/^InfoText=/Info=/" -e "s/^TitleText=/Title=/" | \
-	  sed -e "s/%MOZ_APP_DISPLAYNAME%/$(MOZ_APP_DISPLAYNAME)/" > \
-	  $(FINAL_TARGET)/updater.ini
-else
-	cat $< | \
-	  sed -e "s/^InfoText=/Info=/" -e "s/^TitleText=/Title=/" | \
-	  sed -e "s/%MOZ_APP_DISPLAYNAME%/$(MOZ_APP_DISPLAYNAME)/" > \
-	  $(FINAL_TARGET)/updater.ini
-endif
-endif
-
-ident:
-	@printf "ib_revision "
-	@$(PYTHON) $(moztopsrcdir)/config/printconfigsetting.py \
-	    $(STAGEDIST)/application.ini App SourceStamp
-	@printf "moz_revision "
-	@$(PYTHON) $(moztopsrcdir)/config/printconfigsetting.py \
-	    $(STAGEDIST)/platform.ini Build SourceStamp
-	@printf "buildid "
-	@$(PYTHON) $(moztopsrcdir)/config/printconfigsetting.py \
-	    $(STAGEDIST)/application.ini App BuildID
-
-#These make targets call prepare-repackages by setting different UPLOAD_DIR
-prepare-upload-latest-%:
-	@$(MAKE) prepare-repackages-$* UPLOAD_DIR=$(DIST)/upload/latest
-
-prepare-upload-dated-%:
-	@$(MAKE) prepare-repackages-$* UPLOAD_DIR=$(DIST)/upload/`date "+%Y-%m-%d-%H"`-$(MOZ_PKG_APPNAME)$(MOZ_APP_VERSION)-l10n
-
-# This target will generate a UPLOAD_DIR folder with
-# l10n repackages in the way that we offer l10n nightlies
-#  1) the package/binary
-#  2) the langpack xpi
-#  3) the installer (on windows)
-# To set the paths those packages should end up, override the following vars:
-# PKG_PATH, PKG_LANGPACK_PATH, PKG_INST_PATH
-prepare-repackages-%:
-ifndef UPLOAD_DIR
-	$(error UPLOAD_DIR not defined)
-endif
-	$(NSINSTALL) -D $(UPLOAD_DIR)
-	$(NSINSTALL) -D $(UPLOAD_DIR)/$(PKG_LANGPACK_PATH)
-# Move the langpack
-	mv $(DIST)/$(PKG_LANGPACK_PATH)$(PKG_LANGPACK_BASENAME).xpi \
-	   $(UPLOAD_DIR)/$(PKG_LANGPACK_PATH)$(PKG_LANGPACK_BASENAME).xpi
-# Move the repackage
-	mv "$(DIST)/$(PACKAGE)" \
-	   "$(UPLOAD_DIR)/$(PACKAGE)"
-# Move the windows installer
-ifeq (WINNT, $(OS_ARCH))
-	mv "$(DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe" \
-	   "$(UPLOAD_DIR)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe"
-endif
-# Set the permissions that the folders will have in ftp once uploaded
-	chmod -vR 775 $(UPLOAD_DIR)
-
-merge-%:
-ifdef LOCALE_MERGEDIR
-	$(RM) -rf $(LOCALE_MERGEDIR)
-	MACOSX_DEPLOYMENT_TARGET= compare-locales -m $(LOCALE_MERGEDIR) $(srcdir)/l10n.ini $(L10NBASEDIR) $*
-endif
-	@echo
-
-IB_L10N_REPO_BASE = https://hg.instantbird.org/l10n
-MOZ_L10N_REPO_BASE = https://hg.mozilla.org/releases/l10n-mozilla-2.0
-
-checkout-%: AB_CD=$*
-checkout-%:
-	mkdir -p $(commtopsrcdir)/$(L10NBASEDIR)
-	$(PYTHON) $(commtopsrcdir)/client.py checkout-l10n --skip-instantbird --clean --l10n-base-dir $(L10NBASEDIR) --locale $(AB_CD)
-
-repack-%: AB_CD=$*
-repack-%:
-	make checkout-$(AB_CD)
-	make merge-$(AB_CD)
-	make installers-$(AB_CD)
deleted file mode 100755
--- a/im/locales/en-US/all-l10n.js
+++ /dev/null
@@ -1,7 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#filter substitution
-
-pref("spellchecker.dictionary", "@AB_CD@");
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/aboutDialog.dtd
+++ /dev/null
@@ -1,10 +0,0 @@
-<!ENTITY aboutDialog.title      "About &brandFullName;">
-<!ENTITY credits.label          "Credits">
-<!ENTITY credits.accesskey      "C">
-<!ENTITY aboutLink.label        "&lt; About &brandShortName;">
-<!ENTITY aboutLink.accesskey    "A">
-<!ENTITY aboutVersion           "version">
-<!ENTITY geckoVersion           "Gecko">
-<!ENTITY libpurpleVersion       "libpurple">
-<!-- Use the &copyrightYear; entity to place the current year. -->
-<!ENTITY copyrightText2         "&#169;2007-&copyrightYear; Contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU GPL license version 2.0 or later.">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/account.dtd
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY accountWindow.title           "Account properties">
-<!ENTITY accountWindow.width           "300">
-<!ENTITY account.general               "General">
-<!ENTITY account.advanced              "Advanced Options">
-<!ENTITY account.name                  "Username:">
-<!ENTITY account.password              "Password:">
-<!ENTITY account.alias                 "Alias:">
-<!ENTITY account.newMailNotification   "Notify on new Mail">
-<!ENTITY account.autojoin              "Auto-Joined Channels:">
-<!ENTITY account.proxySettings.caption "Proxy Settings:">
-<!ENTITY account.proxySettings.change.label     "Change…">
-<!ENTITY account.proxySettings.change.accessKey "C">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/accountWizard.dtd
+++ /dev/null
@@ -1,33 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY windowTitle.label            "Account Wizard">
-
-<!ENTITY accountProtocolTitle.label   "Protocol">
-<!ENTITY accountProtocolInfo.label2   "Please choose the protocol of your IM account.">
-<!ENTITY accountProtocolGetMore.label "Get more…">
-<!ENTITY accountProtocolShowMore.label  "Show all protocols">
-<!ENTITY accountProtocolShowMore.description  "Choose from the full list of protocols">
-
-<!ENTITY accountUsernameTitle.label   "Username">
-<!ENTITY accountUsernameDuplicate.label "This account is already configured!">
-
-<!ENTITY accountPasswordTitle.label   "Password">
-<!ENTITY accountPasswordInfo.label    "Please enter your password in the box below.">
-<!ENTITY accountPasswordField.label   "Password:">
-<!ENTITY accountPasswordManager.label "The password entered here will be stored in the Password Manager. Leave this box empty if you want to be prompted for your password each time this account is connected.">
-
-<!ENTITY accountAdvancedTitle.label   "Advanced Options">
-<!ENTITY accountAdvancedInfo.label    "Feel free to skip this step if you want to.">
-<!ENTITY accountAdvanced.newMailNotification.label   "Notify on new Mail">
-<!ENTITY accountAliasGroupbox.caption "Local Alias">
-<!ENTITY accountAliasField.label      "Alias:">
-<!ENTITY accountAliasInfo.label       "This will only be displayed in your conversations when you talk, remote buddies won't see it.">
-<!ENTITY accountProxySettings.caption "Proxy Settings">
-<!ENTITY accountProxySettings.change.label     "Change…">
-<!ENTITY accountProxySettings.change.accessKey "C">
-
-<!ENTITY accountSummaryTitle.label   "Summary">
-<!ENTITY accountSummaryInfo.label    "A summary of the information you entered is displayed below. Please check it before the account is created.">
-<!ENTITY accountSummary.connectAutomatically.label "Connect this account automatically.">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/accountWizard.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# LOCALIZATION NOTE
-# The selected protocols below should be the most relevant
-# to the target language / location and comma delimited.
-# Exceeding 4 protocols may cause scrolling. A list of the
-# available protocols can be found at
-#     https://wiki.instantbird.org/Protocol_Identifiers
-topProtocol.list=prpl-gtalk,prpl-twitter,prpl-aim,prpl-irc,prpl-jabber
-
-# LOCALIZATION NOTE
-# These are the descriptions of the top protocols specified above.
-# A description should be provided for each protocol ID listed above.
-topProtocol.prpl-gtalk.description=Talk to your Gmail contacts
-topProtocol.prpl-twitter.description=Stay up to date with your Twitter timeline
-topProtocol.prpl-aim.description=Chat with your buddies on AOL Instant Messenger
-topProtocol.prpl-irc.description=Join IRC channels
-topProtocol.prpl-jabber.description=Chat using the open Jabber/XMPP protocol
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/accounts.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# %S is replaced by the name of a protocol
-protoOptions=%S Options
-accountProtocol=Protocol:
-accountUsername=Username:
-accountColon=%S:
-accountUsernameInfo=Please enter the username for your %S account.
-accountUsernameInfoWithDescription=Please enter the username (%S) for your %S account.
-
-account.connection.error=Error: %S
-account.connection.errorUnknownPrpl= No '%S' protocol plugin.
-account.connection.errorEnteringPasswordRequired=Entering a password is required to connect this account.
-account.connection.errorCrashedAccount=A crash occurred while connecting this account.
-account.connection.progress=Connecting: %S…
-account.connecting=Connecting…
-account.connectedForSeconds=Connected for a few seconds.
-account.connectedForDouble=Connected for %S %S and %S %S.
-account.connectedForSingle=Connected for about %S %S.
-account.reconnectInDouble=Reconnection in %S %S and %S %S.
-account.reconnectInSingle=Reconnection in %S %S.
-account.deletePrompt.title=Delete Account?
-account.deletePrompt.message=Are you sure you want to delete this account?
-account.deletePrompt.checkbox=Do &not ask next time
-account.deletePrompt.button=&Delete
-
-accountsManager.notification.button.accessKey=C
-accountsManager.notification.button.label=Connect Now
-accountsManager.notification.userDisabled.label=You have disabled automatic connections.
-accountsManager.notification.safeMode.label=Automatic Connection Settings have been ignored because the application is currently running in Safe-Mode.
-accountsManager.notification.startOffline.label=Automatic Connection Settings have been ignored because the application was started in Offline Mode.
-accountsManager.notification.crash.label=The last run exited unexpectedly while connecting. Automatic Connections have been disabled to give you an opportunity to Edit your Settings.
-accountsManager.notification.singleCrash.label=A previous run exited unexpectedly while connecting a new or edited account. It has not been connected so that you can Edit its Settings.;A previous run exited unexpectedly while connecting #1 new or edited accounts. They have not been connected so that you can Edit their Settings.
-accountsManager.notification.other.label=Automatic connection has been disabled.
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/addbuddy.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY addContactWindow.title         "Add Contact">
-<!ENTITY name.label                     "Username">
-<!ENTITY account.label                  "Account">
-<!ENTITY tag.label                      "Group">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/conversation.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-contextAddContact.label=Add Contact…
-contextAddContact.accesskey=A
-contextShowLogs.label=Show Logs
-contextShowLogs.accesskey=L
-contextCloseConv.label=Close Conversation
-contextCloseConv.accesskey=v
-contextHideConv.label=Put Conversation on Hold
-contextHideConv.accesskey=h
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/core.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-aboutCommand.help=about &lt;page&gt;: display about:&lt;page&gt; in a new tab.
-aboutCommand.invalidPageMessage="%S" is not a valid about page.
-
-startupFailure.title=Instantbird - Start up failure
-startupFailure.apologize=Instantbird encountered a serious error and cannot start, we apologize for the inconvenience.
-startupFailure.update=An updated version will probably be available shortly to fix the problem.
-
-startupFailure.purplexpcomFileError=Description: The file "instantbird.xpt" is missing or corrupted.
-startupFailure.xpcomRegistrationError=Description: XPCOM registration of the core component failed.
-startupFailure.purplexpcomInitError=An exception occurred while initializing the core component: %S
-startupFailure.passwordServiceError=Password service initialization failed.
-
-startupFailure.buttonUpdate=Check for Updates
-startupFailure.buttonClose=Close Instantbird
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/credits.dtd
+++ /dev/null
@@ -1,23 +0,0 @@
-<!ENTITY credit.title        "&brandFullName; Credits">
-<!ENTITY credit.lead         "Lead Developer">
-<!ENTITY credit.contributors "Contributors">
-<!ENTITY credit.thanks       "Special Thanks To">
-
-<!ENTITY credit.license      "license">
-
-<!-- localization credits look like this: -->
-<!--
-<!ENTITY credit.translation
-  "<h3>Translators</h3><ul><li>Name Here</li></ul>">
--->
-<!ENTITY credit.translation "">
-
-<!ENTITY credit.poweredByGecko "Powered by Gecko&trade; and libpurple">
-
-<!-- copied from what used to be
-toolkit/locales/en-US/chrome/global/license.dtd in mozilla 1.9.2 -->
-<!ENTITY license.part0     "is copyright">
-<!ENTITY license.part1     "by its">
-<!ENTITY license.contrib   "contributors">
-<!ENTITY license.part2     "according to terms set out in the">
-<!ENTITY license.part3     "document. All Rights Reserved.">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/engineManager.dtd
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY  engineManager.title       "Manage Search Engine List">
-<!ENTITY  engineManager.style       "min-width: 35em;">
-<!ENTITY  engineManager.intro       "You have the following search engines installed:">
-
-<!ENTITY  columnLabel.name          "Name">
-<!-- Buttons -->
-<!ENTITY  up.label                  "Move Up">
-<!ENTITY  up.accesskey              "U">
-<!ENTITY  dn.label                  "Move Down">
-<!ENTITY  dn.accesskey              "D">
-<!ENTITY  remove.label              "Remove">
-<!ENTITY  remove.accesskey          "R">
-
-<!ENTITY  addEngine.label           "Get more search engines…">
-<!ENTITY  addEngine.accesskey       "A">
-
-<!ENTITY  restoreDefaults.label     "Restore Defaults">
-<!ENTITY  restoreDefaults.accesskey "e">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/engineManager.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-editTitle=Edit Keyword
-editMsg=Enter a new keyword for "%S":
-duplicateTitle=Duplicate Keyword
-duplicateEngineMsg=You have chosen a keyword that is currently in use by "%S". Please select another.
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/extensions-discover.dtd
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY extensions-discover.description "Add-ons are applications
- that let you personalize &brandShortName; with extra functionality
- or style. Try some message styles, emoticon themes or usability
- extensions to make &brandShortName; your own.">
-
-<!ENTITY extensions-discover.footer "You can search for add-ons using the above searchbox, or browse:">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/extensions.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# These are originally from
-# mozilla-central/source/browser/locales/en-US/chrome/browser/browser.properties
-# and can be imported to avoid retranslating strings.
-
-xpinstallPromptWarning=%S prevented this site (%S) from asking you to install software on your computer.
-xpinstallPromptAllowButton=Allow
-# Accessibility Note:
-# Be sure you do not choose an accesskey that is used elsewhere in the active context (e.g. main menu bar, submenu of the warning popup button)
-# See http://www.mozilla.org/access/keyboard/accesskey for details
-xpinstallPromptAllowButton.accesskey=A
-xpinstallDisabledMessageLocked=Software installation has been disabled by your system administrator.
-xpinstallDisabledMessage=Software installation is currently disabled. Click Enable and try again.
-xpinstallDisabledButton=Enable
-xpinstallDisabledButton.accesskey=n
-
-# LOCALIZATION NOTE (addonsInstalled, addonsInstalledNeedsRestart):
-# Semi-colon list of plural forms. See:
-# http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #1 first add-on's name, #2 number of add-ons, #3 application name
-addonsInstalled=#1 has been installed successfully.;#2 add-ons have been installed successfully.
-addonsInstalledNeedsRestart=#1 will be installed after you restart #3.;#2 add-ons will be installed after you restart #3.
-addonInstallRestartButton=Restart Now
-addonInstallRestartButton.accesskey=R
-
-# LOCALIZATION NOTE (addonError-1, addonError-2, addonError-3, addonError-4):
-# #1 is the add-on name, #2 is the host name, #3 is the application name
-# #4 is the application version
-addonError-1=The add-on could not be downloaded because of a connection failure on #2.
-addonError-2=The add-on from #2 could not be installed because it does not match the add-on #3 expected.
-addonError-3=The add-on downloaded from #2 could not be installed because it appears to be corrupt.
-addonError-4=#1 could not be installed because #3 cannot modify the needed file.
-
-# LOCALIZATION NOTE (addonLocalError-1, addonLocalError-2, addonLocalError-3, addonLocalError-4, addonErrorIncompatible, addonErrorBlocklisted):
-# #1 is the add-on name, #3 is the application name, #4 is the application version
-addonLocalError-1=This add-on could not be installed because of a filesystem error.
-addonLocalError-2=This add-on could not be installed because it does not match the add-on #3 expected.
-addonLocalError-3=This add-on could not be installed because it appears to be corrupt.
-addonLocalError-4=#1 could not be installed because #3 cannot modify the needed file.
-addonErrorIncompatible=#1 could not be installed because it is not compatible with #3 #4.
-addonErrorBlocklisted=#1 could not be installed because it has a high risk of causing stability or security problems.
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/instantbird.dtd
+++ /dev/null
@@ -1,166 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY convWindow.title   "Conversations - &brandShortName;">
-<!ENTITY convWindow.titlemodifiermenuseparator " - ">
-<!ENTITY convWindow.titlemodifier "&brandShortName;">
-<!ENTITY logsWindow.title   "Conversation logs - &brandShortName;">
-<!ENTITY logsWindow.titlemodifiermenuseparator " - ">
-<!ENTITY logsWindow.titlemodifier "&brandShortName;">
-<!ENTITY logsWindow.corruptlogfile "Empty or corrupt log file.">
-<!ENTITY file.menu          "File">
-<!ENTITY file.accesskey     "F">
-
-<!-- Copied from mozilla/browser/locales/en-US/chrome/browser/browser.dtd -->
-<!ENTITY quitApplicationCmdWin.label       "Exit">
-<!ENTITY quitApplicationCmdWin.accesskey   "x">
-<!ENTITY quitApplicationCmd.label       "Quit">
-<!ENTITY quitApplicationCmd.accesskey   "Q">
-<!ENTITY quitApplicationCmdMac.label    "Quit &brandShortName;">
-<!ENTITY quitApplicationCmdMac.key      "Q">
-
-<!ENTITY addContact            "Add Contact…">
-<!ENTITY addContact.commandkey "b">
-<!ENTITY addContact.accesskey  "C">
-<!ENTITY joinChat              "Join Chat…">
-<!ENTITY joinChat.commandkey   "j">
-<!ENTITY joinChat.accesskey    "J">
-<!ENTITY newtab                "New Conversation…">
-<!ENTITY newtab.commandkey     "t">
-<!ENTITY newtab.accesskey      "n">
-<!ENTITY setStatusTo           "Set Status to…">
-<!ENTITY setStatusTo.accesskey "S">
-<!ENTITY available             "Available">
-<!ENTITY available.accesskey   "A">
-<!ENTITY unavailable           "Unavailable">
-<!ENTITY unavailable.accesskey "U">
-<!ENTITY offline               "Offline">
-<!ENTITY offline.accesskey     "O">
-<!ENTITY tools.menu            "Tools">
-<!ENTITY tools.accesskey       "T">
-<!ENTITY accountManager        "Accounts">
-<!ENTITY account.commandkey    "a">
-<!ENTITY account.accesskey     "A">
-<!ENTITY contacts.label        "Contacts">
-<!ENTITY contacts.accesskey    "C">
-<!ENTITY contacts.commandkey   "c">
-<!ENTITY addonManager          "Add-ons">
-<!ENTITY addonManager.accesskey "d">
-<!ENTITY addonManager.commandkey "d">
-<!ENTITY addonManager.key      "d">
-<!ENTITY checkForUpdates       "Check for Updates">
-<!ENTITY help.menu             "Help">
-<!ENTITY help.accesskey        "H">
-<!-- LOCALIZATION NOTE (helpWin.menu):
-    Some localizations of Windows (e.g. French, German) use "?" for the help
-    button in the menubar. -->
-<!ENTITY helpWin.menu          "Help">
-<!ENTITY helpWin.accesskey     "H">
-<!ENTITY about.menu            "About &brandShortName;">
-<!ENTITY about.accesskey       "A">
-
-<!ENTITY conversation.contextMenu.close "Close Tab">
-<!ENTITY chat.participants  "Participants:">
-
-<!ENTITY errorConsoleCmd.label        "Error Console">
-<!ENTITY errorConsoleCmd.accesskey    "C">
-<!ENTITY errorConsoleCmd.commandkey   "j">
-
-<!ENTITY preferencesCmd.label         "Options…">
-<!ENTITY preferencesCmd.accesskey     "O">
-<!ENTITY preferencesCmdUnix.label     "Preferences">
-<!ENTITY preferencesCmdUnix.accesskey "n">
-
-<!ENTITY textEnlarge.commandkey   "+">
-<!ENTITY textEnlarge.commandkey2  "=">
-<!ENTITY textEnlarge.commandkey3  "">
-<!ENTITY textReduce.commandkey    "-">
-<!ENTITY textReduce.commandkey2   "">
-<!ENTITY textReset.commandkey     "0">
-<!ENTITY textReset.commandkey2    "">
-
-<!ENTITY findOnCmd.commandkey     "f">
-<!ENTITY findAgainCmd.commandkey  "g">
-<!ENTITY findAgainCmd.commandkey2 "VK_F3">
-
-<!ENTITY openLinkCmd.label            "Open Link…">
-<!ENTITY openLinkCmd.accesskey        "O">
-<!ENTITY copyLinkCmd.label            "Copy Link Location">
-<!ENTITY copyLinkCmd.accesskey        "a">
-<!ENTITY copyEmailCmd.label           "Copy Email Address">
-<!ENTITY copyEmailCmd.accesskey       "E">
-<!ENTITY engineManagerCmd.label       "Manage Search Engines…">
-
-<!ENTITY userIcon.label                "Change your icon">
-<!ENTITY contactsHeader.label          "Contacts">
-<!ENTITY convsHeader.label             "Conversations on hold">
-<!-- LOCALIZATION NOTE (dummyContact.label):
-     This string is not displayed anywhere, but it is used to calculate
-     the height of an item in the contact list. Therefore you should
-     set it to a string which contains characters that cover all
-     vertical sizes that occur in your language. -->
-<!ENTITY dummyContact.label            "SgFyWp">
-
-<!ENTITY openConversationCmd.label     "Start a conversation">
-<!ENTITY openConversationCmd.accesskey "c">
-<!ENTITY showConversationCmd.label     "Show conversation">
-<!ENTITY showConversationCmd.accesskey "S">
-<!ENTITY closeConversationCmd.label    "Close conversation">
-<!ENTITY closeConversationCmd.accesskey "C">
-<!ENTITY aliasCmd.label                "Rename">
-<!ENTITY aliasCmd.accesskey            "R">
-<!ENTITY detachCmd.label               "Detach from contact">
-<!ENTITY detachCmd.accesskey           "D">
-<!ENTITY deleteCmd.label               "Remove">
-<!ENTITY deleteCmd.accesskey           "v">
-<!ENTITY tagsCmd.label                 "Tags…">
-<!ENTITY tagsCmd.accesskey             "T">
-<!ENTITY showLogsCmd.label             "Show Logs">
-<!ENTITY showLogsCmd.accesskey         "L">
-<!ENTITY hideTagCmd.label              "Hide Tag">
-<!ENTITY hideTagCmd.accesskey          "H">
-<!ENTITY visibleTagsCmd.label          "Visible Tags…">
-<!ENTITY visibleTagsCmd.accesskey      "V">
-<!ENTITY showOfflineContactsCmd.label  "Show Offline Contacts">
-<!ENTITY showOfflineContactsCmd.accesskey "O">
-
-<!ENTITY expandContactTooltip          "Expand">
-<!ENTITY collapseContactTooltip        "Collapse">
-
-<!ENTITY contactDropTarget2            "Drop another contact here to merge them.">
-
-<!ENTITY hideGroupTooltip              "Hide">
-
-<!-- Context Menu to add/remove user icon -->
-<!ENTITY selectFileCmd.label           "Select file…">
-<!ENTITY selectFileCmd.accesskey       "S">
-<!ENTITY takePictureCmd.label          "Take picture…">
-<!ENTITY takePictureCmd.accesskey      "T">
-<!ENTITY removeIconCmd.label           "Remove">
-<!ENTITY captureCmd.label              "Capture">
-<!ENTITY captureCmd.accesskey          "C">
-<!ENTITY captureBackCmd.label          "Back">
-<!ENTITY captureBackCmd.accesskey      "B">
-<!ENTITY retakeCmd.label               "Retake">
-<!ENTITY retakeCmd.accesskey           "R">
-<!ENTITY setIconCmd.label              "Set Icon">
-<!ENTITY setIconCmd.accesskey          "I">
-
-<!-- Copied from mozilla/browser/locales/en-US/chrome/browser/baseMenuOverlay.dtd -->
-<!--  Mac OS X Window Menu -->
-<!ENTITY windowMenu.label "Window">
-<!ENTITY minimizeWindow.label "Minimize">
-<!ENTITY minimizeWindow.key "m">
-<!ENTITY bringAllToFront.label "Bring All to Front">
-<!ENTITY zoomWindow.label "Zoom">
-
-<!-- Mac OS X Application Menu (Cocoa widgets) -->
-<!ENTITY preferencesCmdMac.label        "Preferences…">
-<!ENTITY preferencesCmdMac.commandkey   ",">
-<!ENTITY servicesMenuMac.label          "Services">
-<!ENTITY hideThisAppCmdMac.label        "Hide &brandShortName;">
-<!ENTITY hideThisAppCmdMac.commandkey   "H">
-<!ENTITY hideOtherAppsCmdMac.label      "Hide Others">
-<!ENTITY hideOtherAppsCmdMac.commandkey "H">
-<!ENTITY showAllAppsCmdMac.label        "Show All">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/instantbird.properties
+++ /dev/null
@@ -1,162 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# LOCALIZATION NOTE (contextMenuSearchText): %1$S is the search engine,
-# %2$S is the selection string.
-contextMenuSearchText=Search %1$S for "%2$S"
-contextMenuSearchText.accesskey=S
-contextMenuSearchWith=Search "%S" with…
-
-addNewTagCmd.label=Add New Tag…
-addNewTagCmd.accesskey=N
-newTagPromptTitle=New Tag
-newTagPromptMessage=Please enter the name of the new tag:
-
-#LOCALIZATION NOTE
-# this is used in the addBuddies dialog if the list of existing groups is empty
-defaultGroup=Contacts
-
-#LOCALIZATION NOTE This string appears in a notification bar at the
-# top of the Contacts window when someone added the user to his/her
-# contact list, to request the permission from the user to share
-# status information with this potential new contact.
-# %S is replaced with the user name of the potential new contact.
-buddy.authRequest.label=%S wants to chat with you
-buddy.authRequest.allow.label=Allow
-buddy.authRequest.allow.accesskey=A
-buddy.authRequest.deny.label=Deny
-buddy.authRequest.deny.accesskey=D
-
-#LOCALIZATION NOTE
-# %S here will be replaced by the alias (or username) of a contact about
-# to be removed from the contact list.
-contact.deletePrompt.title=Delete %S?
-
-#LOCALIZATION NOTE
-# The first parameter of this string will by the name of a contact (either
-# the alias followed by the username between parenthesis if an alias
-# is set, or only the username otherwise).
-# The second parameter will be the name of the protocol on which this
-# contact is removed (for example: AIM, MSN, Google Talk).
-#
-# Please find a wording that will keep the username as close as
-# possible to the beginning of the string, because this is the
-# important information that an user should see when looking quickly
-# at this prompt.
-contact.deletePrompt.message=%S will be permanently removed from your %S contact list if you continue.
-
-#LOCALIZATION NOTE
-# the & symbol indicates the position of the character that should be
-# used as the accesskey for this button.
-contact.deletePrompt.button=&Delete
-
-group.otherContacts.name=Other Contacts
-#LOCALIZATION NOTE
-# %S here will be replaced by the tag name
-group.hidePrompt.title=Hide %S?
-
-#LOCALIZATION NOTE %S here will be replaced by the tag name.
-# The translation for 'Visible Tags…' here should match the translation of
-# visibleTagsCmd.label in instantbird.dtd
-# The translation for 'Other Contacts' should match group.otherContacts.name
-group.hidePrompt.message=The tag '%S' will no longer be visible. Use the 'Visible Tags…' context menu item to show it again.\n\nContacts that have no visible tag will be displayed in the 'Other Contacts' special group at the bottom of the list.
-
-#LOCALIZATION NOTE
-# The following strings are used as textual representation of contacts, that
-# screenreaders can read out loud for visually impaired users.
-#  %1$S is the displayname of the contact
-#  %2$S is the status text of this contact
-#  %3$S is a list of the contact's buddies, joined by contact.buddyListSeparator
-# Example for the compact/collapsed state of a contact: "John Doe (I'm away)"
-contact.collapsed=%1$S (%2$S)
-# Example for the expanded state: "John Doe (I'm away): John Doe, JohnDoe@gmail.com"
-contact.expanded=%1$S (%2$S): %3$S
-# The trailing space here is intentional.
-contact.buddySeparator=, 
-
-#LOCALIZATION NOTE
-# the & symbol indicates the position of the character that should be
-# used as the accesskey for this button.
-group.hidePrompt.button=&Hide
-
-group.hidePrompt.checkbox=Show next time
-
-displayNameEmptyText=Display Name
-userIconFilePickerTitle=Select the new icon…
-
-isTyping=%S is typing.
-hasStoppedTyping=%S has stopped typing.
-
-#LOCALIZATION NOTE
-# This will be used by screen readers instead of the participant name for
-# participants that have some special role indicated by an icon.
-#  %S is the name of the participant.
-participant.founder=%S (founder)
-participant.operator=%S (operator)
-participant.half-operator=%S (half-operator)
-participant.voice=%S (voice)
-
-#LOCALIZATION NOTE
-# This will appear in a tooltip when hovering the protocol icon in the toolbar
-# at the top of multi-user chats.
-#  %1$S is the conversation name (IRC example: #instantbird)
-#  %2$S is the account name (IRC example: user@irc.mozilla.org)
-#  %3$S is the protocol name (example: IRC)
-targetTooltipChat=%1$S via %2$S (%3$S)
-#LOCALIZATION NOTE
-# same tooltip text for single user conversations:
-#  %1$S is the conversation name (AIM screenname, ICQ number, ...)
-#  %2$S is the protocol name (example: AIM)
-targetTooltipIM=%1$S (%2$S)
-#LOCALIZATION NOTE
-# This will be appended to targetTooltipIM if the conversation is with a contact
-# and it's possible to talk to another buddy of the same contact.
-targetChangeable=\nClick to change
-
-#LOCALIZATION NOTE
-# this is used as part of the title of the window displaying conversation logs
-# %S will be replaced by the name of a buddy of the name of a chat room.
-logs=%S logs
-
-#LOCALIZATION NOTE
-# These are special entries in the log tree for the corresponding days.
-log.today=Today
-log.yesterday=Yesterday
-
-#LOCALIZATION NOTE
-# These are special groups in the log tree for the last 3-7 days and
-# the last 8-14 days.
-log.currentWeek=This Week
-log.previousWeek=Last Week
-
-#LOCALIZATION NOTE
-# This is shown when an unknown command (/foo) is attempted. %S is the command.
-unknownCommand=%S is not a supported command. Type /help to see the list of commands.
-
-#LOCALIZATION NOTE
-# Shown when the user attempts to send a message while the network (necko) is offline.
-networkOffline=Your account is disconnected because there is no network connection.
-
-#LOCALIZATION NOTE
-# This is shown when the user attempts to send a message while the status is offline.
-statusOffline=Your account is disconnected because your status is currently set to offline.
-
-#LOCALIZATION NOTE
-# This is shown when the user attempts to send a message to a disconnected account.
-# %1$S is the name of the protocol of the account, %2$S the name of the account.
-accountDisconnected=Your %1$S account %2$S is disconnected.
-
-#LOCALIZATION NOTE
-# These appear in the context menu of the chat participants in the
-# participant list.
-contextmenu.nickOpenConv=Private Conversation
-contextmenu.nickShowLogs=Show Logs
-contextmenu.nickAddContact=Add Contact…
-# These appear in the context menu for the nicks of chat participants
-# highlighted in messages, and extend those for the participant list
-# by mentioning the nick.
-# %S is the nick of the chat participant.
-contextmenu.nickOpenConv.withNick=Private Conversation with %S
-contextmenu.nickShowLogs.withNick=Show Logs for %S
-contextmenu.nickAddContact.withNick=Add %S to Contacts…
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/joinChat.dtd
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY joinChatWindow.title           "Join chat">
-<!ENTITY name.label                     "Room">
-<!ENTITY optional.label                 "(optional)">
-<!ENTITY account.label                  "Account">
-<!ENTITY autojoin.label                 "Auto-join this Chat Room">
-<!ENTITY autojoin.accesskey             "A">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/mintrayr.dtd
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY mintrayr.minimize "Minimize to Tray">
-<!ENTITY mintrayr.minimize.tip "Minimizes the current window to the system tray">
-<!ENTITY mintrayr.minimize.accesskey "M">
-<!ENTITY mintrayr.restore "Restore">
-<!ENTITY mintrayr.restore.accesskey "R">
-<!ENTITY mintrayr.keys.minimize.keycode "VK_F9">
-<!ENTITY mintrayr.keys.minimize.modifiers "">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/newtab.dtd
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY filterbox.placeholder "Start typing to filter">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/newtab.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-newtab.label=New Conversation
-newtab.logSweepingInProgress=Optimizing conversation suggestions…
-existingConv.infoText=Switch to conversation
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/advanced.dtd
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!-- Note: each tab panel must contain unique accesskeys -->
-
-<!ENTITY generalTab.label                "General">
-
-<!ENTITY accessibility.label             "Accessibility">
-
-<!ENTITY useCursorNavigation.label       "Always use the cursor keys to navigate within content of conversations">
-<!ENTITY useCursorNavigation.accesskey   "c">
-<!ENTITY searchStartTyping.label         "Search for text when I start typing">
-<!ENTITY searchStartTyping.accesskey     "x">
-
-<!ENTITY conversations.label             "Conversations">
-
-<!ENTITY useAutoScroll.label             "Use autoscrolling">
-<!ENTITY useAutoScroll.accesskey         "a">
-<!ENTITY useSmoothScrolling.label        "Use smooth scrolling">
-<!ENTITY useSmoothScrolling.accesskey    "m">
-<!ENTITY allowHWAccel.label              "Use hardware acceleration when available">
-<!ENTITY allowHWAccel.accesskey          "r">
-<!ENTITY checkSpelling.label             "Check my spelling as I type">
-<!ENTITY checkSpelling.accesskey         "t">
-
-<!ENTITY searchEnginesGroup.label        "Search engines">
-<!ENTITY searchEnginesDesc.label         "Change options for your search engines">
-<!ENTITY searchEngines.label             "Manage Search Engines…">
-<!ENTITY searchEngines.accesskey         "S">
-
-<!ENTITY configEditDesc.label            "Advanced Configuration">
-<!ENTITY configEdit.label                "Config Editor…">
-<!ENTITY configEdit.accesskey            "E">
-
-<!ENTITY networkTab.label                "Network">
-
-<!ENTITY connection.label                "Connection">
-
-<!ENTITY connectionDesc.label            "Configure how &brandShortName; connects to the Internet">
-<!ENTITY connectionInfoDesc.label        "The two following parts will be merged in a later version.">
-<!ENTITY connectionLibpurpleDesc.label   "For libpurple-based accounts">
-<!ENTITY connectionOtherDesc.label       "For everything else (updates, addons, …)">
-<!ENTITY connectionSettings.label        "Settings…">
-<!ENTITY connectionSettings.accesskey    "e">
-<!ENTITY connectionSettings2.accesskey   "i">
-
-<!ENTITY updateTab.label                 "Update">
-
-<!ENTITY updateApp.label                 "&brandShortName; updates:">
-<!ENTITY updateAuto1.label               "Automatically install updates (recommended: improved security)">
-<!ENTITY updateAuto1.accesskey           "A">
-<!ENTITY updateCheck.label               "Check for updates, but let me choose whether to install them">
-<!ENTITY updateCheck.accesskey           "C">
-<!ENTITY updateManual.label              "Never check for updates (not recommended: security risk)">
-<!ENTITY updateManual.accesskey          "N">
-
-<!ENTITY updateAutoAddonWarn.label       "Warn me if this will disable any of my add-ons">
-<!ENTITY updateAutoAddonWarn.accesskey   "W">
-
-<!ENTITY updateHistory.label             "Show Update History">
-<!ENTITY updateHistory.accesskey         "p">
-
-<!ENTITY useService.label                "Use a background service to install updates">
-<!ENTITY useService.accesskey            "b">
-
-<!ENTITY updateOthers.label              "Automatically update:">
-<!ENTITY enableSearchUpdate.label        "Search Engines">
-<!ENTITY enableSearchUpdate.accesskey    "E">
-
-<!ENTITY certificateTab.label            "Certificates">
-<!ENTITY certSelection.label             "Requests">
-<!ENTITY certSelection.description       "When a server requests my personal certificate:">
-<!ENTITY certs.auto                      "Select one automatically">
-<!ENTITY certs.auto.accesskey            "S">
-<!ENTITY certs.ask                       "Ask me every time">
-<!ENTITY certs.ask.accesskey             "A">
-<!ENTITY enableOCSP.label                "Query OCSP responder servers to confirm the current validity of certificates">
-<!ENTITY enableOCSP.accesskey            "Q">
-<!ENTITY viewCerts.label                 "View Certificates">
-<!ENTITY viewCerts.accesskey             "C">
-<!ENTITY viewSecurityDevices.label       "Security Devices">
-<!ENTITY viewSecurityDevices.accesskey   "D">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/applicationManager.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY appManager.title     "Application details">
-<!ENTITY appManager.style     "width: 30em; min-height: 20em;">
-<!ENTITY remove.label         "Remove">
-<!ENTITY remove.accesskey     "R">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/applicationManager.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# LOCALIZATION NOTE
-# in descriptionApplications, %S will be replaced by one of the 3 following strings
-descriptionApplications=The following applications can be used to handle %S.
-
-handleProtocol=%S links
-handleWebFeeds=Web Feeds
-handleFile=%S content
-
-descriptionWebApp=This web application is hosted at:
-descriptionLocalApp=This application is located at:
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/applications.dtd
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY  typeColumn.label        "Content Type">
-<!ENTITY  typeColumn.accesskey    "T">
-
-<!ENTITY  actionColumn2.label     "Action">
-<!ENTITY  actionColumn2.accesskey "A">
-
-<!ENTITY  focusSearch1.key        "f">
-<!ENTITY  focusSearch2.key        "k">
-
-<!ENTITY  filter.emptytext        "Search">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/colors.dtd
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY  colorsDialog.title              "Colors">
-<!ENTITY  window.width                    "38em">
-<!ENTITY  window.macWidth                 "41em">
-
-<!ENTITY  color                           "Text and Background">
-<!ENTITY  textColor.label                 "Text:">
-<!ENTITY  textColor.accesskey             "t">
-<!ENTITY  backgroundColor.label           "Background:">
-<!ENTITY  backgroundColor.accesskey       "b">
-<!ENTITY  useSystemColors.label           "Use system colors">
-<!ENTITY  useSystemColors.accesskey       "s">
-
-<!ENTITY  underlineLinks.label            "Underline links">
-<!ENTITY  underlineLinks.accesskey        "u">
-<!ENTITY  links                           "Link Colors">
-<!ENTITY  linkColor.label                 "Links:">
-<!ENTITY  linkColor.accesskey             "l">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/connection.dtd
+++ /dev/null
@@ -1,49 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-<!ENTITY  connectionsDialog.title       "Connection Settings">
-<!ENTITY  window.width                  "37em">
-<!ENTITY  window.macWidth               "39em">
-
-<!ENTITY  proxyTitle.label              "Configure Proxies to Access the Internet">
-<!ENTITY  noProxyTypeRadio.label        "No proxy">
-<!ENTITY  noProxyTypeRadio.accesskey    "y">
-<!ENTITY  systemTypeRadio.label         "Use system proxy settings">
-<!ENTITY  systemTypeRadio.accesskey     "u">
-<!ENTITY  WPADTypeRadio.label           "Auto-detect proxy settings for this network">
-<!ENTITY  WPADTypeRadio.accesskey       "w">
-<!ENTITY  manualTypeRadio.label         "Manual proxy configuration:">
-<!ENTITY  manualTypeRadio.accesskey     "m">
-<!ENTITY  autoTypeRadio.label           "Automatic proxy configuration URL:">
-<!ENTITY  autoTypeRadio.accesskey       "A">
-<!ENTITY  reload.label                  "Reload">
-<!ENTITY  reload.accesskey              "e">
-<!ENTITY  ftp.label                     "FTP Proxy:">
-<!ENTITY  ftp.accesskey                 "F">
-<!ENTITY  http.label                    "HTTP Proxy:">
-<!ENTITY  http.accesskey                "x">
-<!ENTITY  ssl.label                     "SSL Proxy:">
-<!ENTITY  ssl.accesskey                 "L">
-<!ENTITY  socks.label                   "SOCKS Host:">
-<!ENTITY  socks.accesskey               "C">
-<!ENTITY  socks4.label                  "SOCKS v4">
-<!ENTITY  socks4.accesskey              "K">
-<!ENTITY  socks5.label                  "SOCKS v5">
-<!ENTITY  socks5.accesskey              "v">
-<!ENTITY  socksRemoteDNS.label          "Remote DNS">
-<!ENTITY  socksRemoteDNS.accesskey      "d">
-<!ENTITY  port.label                    "Port:">
-<!ENTITY  HTTPport.accesskey            "P">
-<!ENTITY  SSLport.accesskey             "o">
-<!ENTITY  FTPport.accesskey             "r">
-<!ENTITY  SOCKSport.accesskey           "t">
-<!ENTITY  noproxy.label                 "No Proxy for:">
-<!ENTITY  noproxy.accesskey             "n">
-<!ENTITY  noproxyExplain.label          "Example: .mozilla.org, .net.nz, 192.168.1.0/24">
-<!ENTITY  shareproxy.label              "Use this proxy server for all protocols">
-<!ENTITY  shareproxy.accesskey          "s">
-<!ENTITY  autologinproxy.label          "Do not prompt for authentication if password is saved">
-<!ENTITY  autologinproxy.accesskey      "i">
-<!ENTITY  autologinproxy.tooltip        "This option silently authenticates you to proxies when you have saved credentials for them. You will be prompted if authentication fails.">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/content.dtd
+++ /dev/null
@@ -1,26 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY  formattings.label           "Formattings">
-
-<!ENTITY  fontsAndColors.label        "Fonts &amp; Colors">
-
-<!ENTITY  filterLevel.label           "Display formattings of incoming messages:">
-<!ENTITY  filterLevel.accesskey       "f">
-<!ENTITY  filterLevelNone             "none">
-<!ENTITY  filterLevelBasic            "only basic formattings (bold, italic, underline)">
-<!ENTITY  filterLevelAll              "all (font, colors, …)">
-
-<!ENTITY  defaultFont.label           "Default font:">
-<!ENTITY  defaultFont.accesskey       "D">
-<!ENTITY  defaultSize.label           "Size:">
-<!ENTITY  defaultSize.accesskey       "S">
-<!ENTITY  defaultColor.label          "Default Color:">
-<!ENTITY  defaultColor.accesskey      "C">
-
-<!ENTITY  advancedColors.label         "Advanced…">
-<!ENTITY  advancedColors.accesskey     "A">
-
-<!ENTITY  formatOutgoingMessages.label "Send these fonts and colors as part of my messages when possible">
-<!ENTITY  formatOutgoingMessages.accesskey "m">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/main.dtd
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY startup.label               "Startup">
-<!ENTITY startupAction.label         "When &brandShortName; starts:">
-<!ENTITY startupAction.accesskey     "s">
-<!ENTITY startupOffline.label        "Open the Account manager">
-<!ENTITY startupConnectAuto.label    "Connect my accounts automatically">
-
-<!ENTITY accountsMgr.label             "Accounts">
-<!ENTITY manageAccountsDescWin.label   "Change options for your accounts">
-<!ENTITY manageAccountsDescUnix2.label "Change preferences for your accounts">
-<!ENTITY manageAccounts.label          "Manage Accounts…">
-<!ENTITY manageAccounts.accesskey      "A">
-
-<!ENTITY newMessage.label              "When receiving a new message">
-<!ENTITY getAttention.label            "Flash the taskbar item">
-<!ENTITY getAttention.accesskey        "F">
-<!ENTITY getAttentionMac.label         "Animate dock icon">
-<!ENTITY getAttentionMac.accesskey     "d">
-<!ENTITY unreadCountInDock.label       "Show unread message count in a dock badge">
-<!ENTITY unreadCountInDock.accesskey   "u">
-<!ENTITY notifyOfNewMessages.label     "Notify of messages received in inactive windows">
-<!ENTITY notifyOfNewMessages.accesskey "N">
-
-<!ENTITY sounds.label                  "Sounds">
-<!ENTITY playSoundsMessage.label       "Play sounds on messaging events">
-<!ENTITY playSoundsMessage.accesskey   "P">
-<!ENTITY playSoundsBlist.label         "Play sounds on buddy list events">
-<!ENTITY playSoundsBlist.accesskey     "b">
-
-<!ENTITY systray.label                 "System Tray Icon">
-<!ENTITY alwaysShowTrayIcon.label      "Always show the system tray icon">
-<!ENTITY alwaysShowTrayIcon.accesskey  "i">
-<!ENTITY minimizeToTray.label          "Minimize Contacts window to Tray:">
-<!ENTITY minimizeToTray.accesskey      "t">
-<!ENTITY minimizeOn.never.label        "Never (only from the menu)">
-<!ENTITY minimizeOn.minimize.label     "When Minimizing">
-<!ENTITY minimizeOn.close.label        "Instead of Closing">
-<!ENTITY minimizeOn.both.label         "Instead of Closing and when Minimizing">
-
-<!ENTITY addonsMgr.label               "Add-ons">
-<!ENTITY manageAddonsDescWin.label     "Change options for your add-ons">
-<!ENTITY manageAddonsDescUnix2.label   "Change preferences for your add-ons">
-<!ENTITY manageAddons.label            "Manage Add-ons…">
-<!ENTITY manageAddons.accesskey        "M">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/preferences.dtd
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-
-<!ENTITY  prefWindow.titleWin     "Options">
-<!ENTITY  prefWindow.titleGNOME   "&brandShortName; Preferences">
-<!-- When making changes to prefWindow.styleWin test both Windows Classic and
-     Luna since widget heights are different based on the OS theme -->
-<!ENTITY  prefWinMinSize.styleWin2      "width: 42em; min-height: 37.5em;">
-<!ENTITY  prefWinMinSize.styleMac       "width: 47em; min-height: 40em;">
-<!ENTITY  prefWinMinSize.styleGNOME     "width: 45.5em; min-height: 40.5em;">
-
-<!ENTITY  paneGeneral.title       "General">
-<!ENTITY  paneTabs.title          "Tabs">
-<!ENTITY  paneContent.title       "Content">
-<!ENTITY  paneApplications.title  "Applications">
-<!ENTITY  panePrivacy.title       "Privacy">
-<!ENTITY  paneThemes.title        "Themes">
-<!ENTITY  paneAdvanced.title      "Advanced">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/preferences.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#### Applications
-
-fileEnding=%S file
-saveFile=Save File
-
-# LOCALIZATION NOTE (useApp, useDefault): %S = Application name
-useApp=Use %S
-useDefault=Use %S (default)
-
-useOtherApp=Use other…
-fpTitleChooseApp=Select Helper Application
-manageApp=Application Details…
-alwaysAsk=Always ask
-
-# LOCALIZATION NOTE (typeDescriptionWithType):
-# %1$S = type description (for example "Portable Document Format")
-# %2$S = type (for example "application/pdf")
-typeDescriptionWithType=%S (%S)
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/privacy.dtd
+++ /dev/null
@@ -1,36 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY  status.label                  "Status">
-
-<!ENTITY  sendTyping.label              "Send typing notifications in conversations">
-<!ENTITY  sendTyping.accesskey          "t">
-
-<!ENTITY  reportIdleAfter.label         "Let my contacts know that I am Idle after">
-<!ENTITY  reportIdleAfter.accesskey     "I">
-<!ENTITY  idleTime                      "minutes of inactivity">
-
-<!ENTITY  andSetStatusToAway.label      "and set my status to Away with this status message:">
-<!ENTITY  andSetStatusToAway.accesskey  "A">
-
-<!ENTITY  logsGroup.label               "Records">
-
-<!ENTITY  logConversations.label        "Keep records of my conversations">
-<!ENTITY  logConversations.accesskey    "r">
-<!ENTITY  logSystem.label               "Record connections, disconnections and status changes">
-<!ENTITY  logSystem.accesskey           "c">
-<!ENTITY  logShowFolder.description     "Open the folder containing the record files">
-<!ENTITY  logShowFolderButton.label     "Show Log Folder…">
-<!ENTITY  logShowFolderButton.accesskey "L">
-
-<!-- Passwords, see mail/chrome/messenger/preferences/security.dtd -->
-<!ENTITY  passwords.label               "Passwords">
-<!ENTITY savedPasswords.intro           "&brandShortName; can remember passwords for all of your accounts.">
-<!ENTITY useMasterPassword.label        "Use a master password">
-<!ENTITY useMasterPassword.accesskey    "U">
-<!ENTITY masterPassword.intro           "A Master Password protects all your passwords, but you must enter it once per session.">
-<!ENTITY changeMasterPassword.label     "Change Master Password…">
-<!ENTITY changeMasterPassword.accesskey "C">
-<!ENTITY savedPasswords.label           "Saved Passwords…">
-<!ENTITY savedPasswords.accesskey       "S">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/tabs.dtd
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY enableTabbedConversations.label     "Enable tabbed conversations">
-<!ENTITY enableTabbedConversations.accesskey "t">
-
-<!ENTITY groupMUCsInSeparateWindow.label     "Group Multi-User Chats in a separate window">
-<!ENTITY groupMUCsInSeparateWindow.accesskey "G">
-
-<!ENTITY showTabBar.label                    "Always show the tab bar">
-<!ENTITY showTabBar.accesskey                "b">
-
-<!ENTITY warnCloseMultipleTabs.label         "Warn me when closing multiple tabs if there are unread messages">
-<!ENTITY warnCloseMultipleTabs.accesskey     "m">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/themes.dtd
+++ /dev/null
@@ -1,32 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY messageStyleTab.title             "Message Styles">
-<!ENTITY messageStylePreview.label         "Preview:">
-<!ENTITY messageStyleTheme.label           "Theme:">
-<!ENTITY messageStyleTheme.accesskey       "T">
-<!ENTITY messageStyleBubblesTheme.label    "Bubbles">
-<!ENTITY messageStyleDarkTheme.label       "Dark">
-<!ENTITY messageStylePaperSheetsTheme.label "Paper Sheets">
-<!ENTITY messageStyleSimpleTheme.label     "Simple">
-<!ENTITY messageStyleDefaultTheme.label    "Default">
-<!ENTITY messageStyleVariant.label         "Variant:">
-<!ENTITY messageStyleVariant.accesskey     "V">
-<!ENTITY messageStyleShowHeader.label      "Show Header">
-<!ENTITY messageStyleShowHeader.accesskey  "H">
-<!ENTITY messageStyleNoPreview.title       "No preview available">
-<!ENTITY messageStyleNoPreview.description "This theme is not valid or is currently unavailable (disabled addon, safe-mode, …).">
-<!ENTITY messageStyleGetMore.label         "Get more message styles…">
-<!ENTITY messageStyleNoExtraThemes.label   "(no extra themes installed)">
-
-<!ENTITY emoticonsTab.title             "Emoticons">
-<!ENTITY emoticonsTheme.label           "Emoticon Theme:">
-<!ENTITY emoticonsTheme.accesskey       "E">
-<!ENTITY emoticonsDefaultTheme.label    "Default">
-<!ENTITY emoticonsDisabled.label        "Disabled">
-<!ENTITY emoticonsPreview.description   "These text codes are shown as emoticons in your conversations:">
-<!ENTITY emoticonsImageColumn.label     "Emoticon">
-<!ENTITY emoticonsTextCodesColumn.label "Text Codes">
-<!ENTITY emoticonsGetMore.label         "Get more emoticons…">
-<!ENTITY emoticonsNoExtraThemes.label   "(no extra themes installed)">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/preferences/themes.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Labels for disabled or incompatible themes in the dropdown boxes
-#  Used for both the message style themes and emoticon themes
-disabled=(disabled)
-incompatible=(incompatible)
-
-# Content of preview conversation for message styles
-default=Default
-nick1=Florian
-buddy1=florian@im.instantbird.org
-nick2=Dan
-buddy2=dan@im.instantbird.org
-message1=Hi! :-)
-message2=What's up?
-message3=I'm trying Instantbird! ;-)
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/proxies.dtd
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY proxiesDialog.title                 "Proxy Settings">
-<!ENTITY proxiesDialogHeader.title           "Proxy Settings">
-<!ENTITY proxiesDialogHeader.description     "For this account">
-<!ENTITY proxiesDialog.useGlobalSettings     "Use Global Settings">
-<!ENTITY proxiesDialog.directConnection      "Direct Connection to the Internet">
-<!ENTITY proxiesDialog.noProxy               "(No Proxy)">
-<!ENTITY proxiesDialog.useEnvironment        "Use Environment Settings">
-<!ENTITY proxiesDialog.noProxyInEnvironment  "No proxy settings found in the environment">
-<!ENTITY proxiesDialog.otherSetting          "Other…">
-<!ENTITY proxiesDialog.http.label            "HTTP">
-<!ENTITY proxiesDialog.socks4.label          "SOCKS 4">
-<!ENTITY proxiesDialog.socks5.label          "SOCKS 5">
-<!ENTITY proxiesDialog.hostname.label        "Hostname:">
-<!ENTITY proxiesDialog.hostname.defaultValue "Hostname">
-<!ENTITY proxiesDialog.port.label            "Port:">
-<!ENTITY proxiesDialog.username.label        "Username:">
-<!ENTITY proxiesDialog.password.label        "Password:">
-<!ENTITY proxiesDialog.useAsGlobal.label     "Use these Settings for All Accounts (Change&#160;Global&#160;Settings)">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/proxies.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-proxies.directConnection=Direct Connection to the Internet (No\u00A0Proxy)
-proxies.useEnvironment=Use Environment Settings
-proxies.http=HTTP
-proxies.socks4=SOCKS 4
-proxies.socks5=SOCKS 5
-
-proxies.alert.invalidInput.title=Invalid input
-proxies.alert.invalidInput.message=You need to enter at least a valid hostname and port number to add a new proxy.
-proxies.confirm.passwordUpdate.title=Update Proxy Password?
-proxies.confirm.passwordUpdate.message=The same proxy already exists with a different password. Update the password?
-
-proxies.username.string=Username: %S
-proxies.port.string=Port: %S
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/quitDialog.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-dialogTitle=Unread message(s)
-message=You have unread message(s) in #1 conversation, do you really want to continue?;You have unread messages in #1 conversations, do you really want to continue?
-checkbox=Do &not ask next time
-quitButton=&Quit
-restartButton=&Restart
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/region.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Search engine order (order displayed in the search bar dropdown)s
-browser.search.order.1=Google
-browser.search.order.2=Yahoo
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/tabbrowser.dtd
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY  untitledTab            "(Untitled)">
-<!ENTITY  newTab.label           "New Tab">
-<!ENTITY  newTab.accesskey       "N">
-<!ENTITY  closeTab.label         "Close Tab">
-<!ENTITY  closeTab.accesskey     "c">
-<!ENTITY  closeOtherTabs.accesskey "o">
-<!ENTITY  closeOtherTabs.label     "Close Other Tabs">
-<!ENTITY  openTabInNewWindow.label     "Open in a New Window">
-<!ENTITY  openTabInNewWindow.accesskey "W">
-<!ENTITY  listAllTabs.label      "List all tabs">
-<!ENTITY  newTabButton.tooltip   "Open a new tab">
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/tabbrowser.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-tabs.closeWarningTitle=Confirm close
-tabs.closeWarningMessage=You are about to close #1 conversation with unread messages. Are you sure you want to continue?;You are about to close #1 conversations with unread messages. Are you sure you want to continue?
-tabs.closeButton=Close conversation;Close conversations
-tabs.closeWarningPromptMe=Warn me when I attempt to close multiple conversations with unread messages
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/updates.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Check for Updates
-# LOCALIZATION NOTE (updatesItem_*): these are alternative labels for Check for Update item in Help menu.
-# Which one is used depends on Update process state.
-# This is copied from mozilla/browser/locales/en-US/chrome/browser/browser.properties
-
-updatesItem_default=Check for Updates…
-updatesItem_defaultFallback=Check for Updates…
-updatesItem_default.accesskey=C
-updatesItem_downloading=Downloading %S…
-updatesItem_downloadingFallback=Downloading Update…
-updatesItem_downloading.accesskey=D
-updatesItem_resume=Resume Downloading %S…
-updatesItem_resumeFallback=Resume Downloading Update…
-updatesItem_resume.accesskey=D
-updatesItem_pending=Apply Downloaded Update Now…
-updatesItem_pendingFallback=Apply Downloaded Update Now…
-updatesItem_pending.accesskey=D
deleted file mode 100644
--- a/im/locales/en-US/chrome/instantbird/winjumplist.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# NOTE: this file is no longer used and will be removed post-0.3
-# release, thus it does not actually need to be translated (see bug 841).
-
-# LOCALIZATION NOTE:
-#   These are the labels that show up for the Jump List items.
-available.label=Available
-away.label=Away
-offline.label=Offline
-
-# LOCALIZATION NOTE:
-#   These are descriptions of what each Jump List item will do.
-available.tooltip=Set status to available.
-away.tooltip=Set status to away.
-offline.tooltip=Set status to offline.
deleted file mode 100644
--- a/im/locales/en-US/defines.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-#filter emptyLines
-
-#define MOZ_LANGPACK_CREATOR instantbird.org
-
-# If non-English locales wish to credit multiple contributors, uncomment this
-# variable definition and use the format specified.
-# #define MOZ_LANGPACK_CONTRIBUTORS <em:contributor>Joe Solon</em:contributor> <em:contributor>Suzy Solon</em:contributor>
-
-#unfilter emptyLines
deleted file mode 100755
--- a/im/locales/en-US/installer/custom.properties
+++ /dev/null
@@ -1,82 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# LOCALIZATION NOTE:
-
-# This file must be saved as UTF8
-
-# Accesskeys are defined by prefixing the letter that is to be used for the
-# accesskey with an ampersand (e.g. &).
-
-# Do not replace $BrandShortName, $BrandFullName, or $BrandFullNameDA with a
-# custom string and always use the same one as used by the en-US files.
-# $BrandFullNameDA allows the string to contain an ampersand (e.g. DA stands
-# for double ampersand) and prevents the letter following the ampersand from
-# being used as an accesskey.
-
-# You can use \n to create a newline in the string but only when the string
-# from en-US contains a \n.
-
-REG_APP_DESC=$BrandShortName is an easy to use instant messaging application. It connects to all the famous IM networks.
-CONTEXT_OPTIONS=$BrandShortName &Options
-CONTEXT_SAFE_MODE=$BrandShortName &Safe Mode
-SAFE_MODE=Safe Mode
-OPTIONS_PAGE_TITLE=Setup Type
-OPTIONS_PAGE_SUBTITLE=Choose setup options
-OPTIONS_MAKE_DEFAULT=&Use $BrandShortName as my default instant messaging client
-SHORTCUTS_PAGE_TITLE=Set Up Shortcuts
-SHORTCUTS_PAGE_SUBTITLE=Create Program Icons
-SUMMARY_PAGE_TITLE=Summary
-SUMMARY_PAGE_SUBTITLE=Ready to start installing $BrandShortName
-SUMMARY_INSTALLED_TO=$BrandShortName will be installed to the following location:
-SUMMARY_REBOOT_REQUIRED_INSTALL=A restart of your computer may be required to complete the installation.
-SUMMARY_REBOOT_REQUIRED_UNINSTALL=A restart of your computer may be required to complete the uninstall.
-SUMMARY_INSTALL_CLICK=Click Install to continue.
-SUMMARY_UPGRADE_CLICK=Click Upgrade to continue.
-SURVEY_TEXT=&Tell us what you thought of $BrandShortName
-LAUNCH_TEXT=&Launch $BrandShortName now
-CREATE_ICONS_DESC=Create icons for $BrandShortName:
-ICONS_DESKTOP=On my &Desktop
-ICONS_STARTMENU=In my &Start Menu Programs folder
-ICONS_QUICKLAUNCH=In my &Quick Launch bar
-WARN_MANUALLY_CLOSE_APP_INSTALL=$BrandShortName must be closed to proceed with the installation.\n\nPlease close $BrandShortName to continue.
-WARN_MANUALLY_CLOSE_APP_UNINSTALL=$BrandShortName must be closed to proceed with the uninstall.\n\nPlease close $BrandShortName to continue.
-WARN_MANUALLY_CLOSE_APP_LAUNCH=$BrandShortName is already running.\n\nPlease close $BrandShortName prior to launching the version you have just installed.
-WARN_WRITE_ACCESS=You don't have access to write to the installation directory.\n\nClick OK to select a different directory.
-WARN_DISK_SPACE=You don't have sufficient disk space to install to this location.\n\nClick OK to select a different location.
-WARN_MIN_SUPPORTED_OS_MSG=Sorry, $BrandShortName can't be installed. This version of $BrandShortName requires ${MinSupportedVer} or newer.
-WARN_RESTART_REQUIRED_UNINSTALL=Your computer must be restarted to complete a previous uninstall of $BrandShortName. Do you want to reboot now?
-WARN_RESTART_REQUIRED_UPGRADE=Your computer must be restarted to complete a previous upgrade of $BrandShortName. Do you want to reboot now?
-ERROR_CREATE_DIRECTORY_PREFIX=Error creating directory:
-ERROR_CREATE_DIRECTORY_SUFFIX=Click Cancel to stop the installation or\nRetry to try again.
-
-UN_CONFIRM_PAGE_TITLE=Uninstall $BrandFullName
-UN_CONFIRM_PAGE_SUBTITLE=Remove $BrandFullName from your computer.
-UN_CONFIRM_UNINSTALLED_FROM=$BrandShortName will be uninstalled from the following location:
-UN_CONFIRM_CLICK=Click Uninstall to continue.
-UN_REMOVE_PROFILES=&Remove my $BrandShortName personal data and customizations
-UN_REMOVE_PROFILES_DESC=This will permanently remove your bookmarks, saved passwords, cookies and customizations. You may wish to keep this information if you plan on installing another version of $BrandShortName in the future.
-
-BANNER_CHECK_EXISTING=Checking existing installation…
-
-STATUS_INSTALL_APP=Installing $BrandShortName…
-STATUS_INSTALL_LANG=Installing Language Files (${AB_CD})…
-STATUS_UNINSTALL_MAIN=Uninstalling $BrandShortName…
-STATUS_CLEANUP=A Little Housekeeping…
-
-# _DESC strings support approximately 65 characters per line.
-# One line
-OPTIONS_SUMMARY=Choose the type of setup you prefer, then click Next.
-# One line
-OPTION_STANDARD_DESC=$BrandShortName will be installed with the most common options.
-OPTION_STANDARD_RADIO=&Standard
-# Two lines
-OPTION_CUSTOM_DESC=You may choose individual options to be installed. Recommended for experienced users.
-OPTION_CUSTOM_RADIO=&Custom
-
-# LOCALIZATION NOTE:
-# The following text replaces the Install button text on the summary page.
-# Verify that the access key for InstallBtn (in override.properties) and
-# UPGRADE_BUTTON is not already used by SUMMARY_TAKE_DEFAULTS.
-UPGRADE_BUTTON=&Upgrade
deleted file mode 100755
--- a/im/locales/en-US/installer/mui.properties
+++ /dev/null
@@ -1,61 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# To make the l10n tinderboxen see changes to this file you can change a value
-# name by adding - to the end of the name followed by chars (e.g. Branding-2).
-
-# LOCALIZATION NOTE:
-
-# This file must be saved as UTF8
-
-# Accesskeys are defined by prefixing the letter that is to be used for the
-# accesskey with an ampersand (e.g. &).
-
-# Do not replace $BrandShortName, $BrandFullName, or $BrandFullNameDA with a
-# custom string and always use the same one as used by the en-US files.
-# $BrandFullNameDA allows the string to contain an ampersand (e.g. DA stands
-# for double ampersand) and prevents the letter following the ampersand from
-# being used as an accesskey.
-
-# You can use \n to create a newline in the string but only when the string
-# from en-US contains a \n.
-
-MUI_TEXT_WELCOME_INFO_TITLE=Welcome to the $BrandFullNameDA Setup Wizard
-MUI_TEXT_WELCOME_INFO_TEXT=This wizard will guide you through the installation of $BrandFullNameDA.\n\n$_CLICK
-MUI_TEXT_COMPONENTS_TITLE=Choose Components
-MUI_TEXT_COMPONENTS_SUBTITLE=Choose which features of $BrandFullNameDA you want to install.
-MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE=Description
-MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO=Position your mouse over a component to see its description.
-MUI_TEXT_DIRECTORY_TITLE=Choose Install Location
-MUI_TEXT_DIRECTORY_SUBTITLE=Choose the folder in which to install $BrandFullNameDA.
-MUI_TEXT_INSTALLING_TITLE=Installing
-MUI_TEXT_INSTALLING_SUBTITLE=Please wait while $BrandFullNameDA is being installed.
-MUI_TEXT_FINISH_TITLE=Installation Complete
-MUI_TEXT_FINISH_SUBTITLE=Setup was completed successfully.
-MUI_TEXT_ABORT_TITLE=Installation Aborted
-MUI_TEXT_ABORT_SUBTITLE=Setup was not completed successfully.
-MUI_BUTTONTEXT_FINISH=&Finish
-MUI_TEXT_FINISH_INFO_TITLE=Completing the $BrandFullNameDA Setup Wizard
-MUI_TEXT_FINISH_INFO_TEXT=$BrandFullNameDA has been installed on your computer.\n\nClick Finish to close this wizard.
-MUI_TEXT_FINISH_INFO_REBOOT=Your computer must be restarted in order to complete the installation of $BrandFullNameDA. Do you want to reboot now?
-MUI_TEXT_FINISH_REBOOTNOW=Reboot now
-MUI_TEXT_FINISH_REBOOTLATER=I want to manually reboot later
-MUI_TEXT_STARTMENU_TITLE=Choose Start Menu Folder
-MUI_TEXT_STARTMENU_SUBTITLE=Choose a Start Menu folder for the $BrandFullNameDA shortcuts.
-MUI_INNERTEXT_STARTMENU_TOP=Select the Start Menu folder in which you would like to create the program's shortcuts. You can also enter a name to create a new folder.
-MUI_TEXT_ABORTWARNING=Are you sure you want to quit $BrandFullName Setup?
-MUI_UNTEXT_WELCOME_INFO_TITLE=Welcome to the $BrandFullNameDA Uninstall Wizard
-MUI_UNTEXT_WELCOME_INFO_TEXT=This wizard will guide you through the uninstallation of $BrandFullNameDA.\n\nBefore starting the uninstallation, make sure $BrandFullNameDA is not running.\n\n$_CLICK
-MUI_UNTEXT_CONFIRM_TITLE=Uninstall $BrandFullNameDA
-MUI_UNTEXT_CONFIRM_SUBTITLE=Remove $BrandFullNameDA from your computer.
-MUI_UNTEXT_UNINSTALLING_TITLE=Uninstalling
-MUI_UNTEXT_UNINSTALLING_SUBTITLE=Please wait while $BrandFullNameDA is being uninstalled.
-MUI_UNTEXT_FINISH_TITLE=Uninstallation Complete
-MUI_UNTEXT_FINISH_SUBTITLE=Uninstall was completed successfully.
-MUI_UNTEXT_ABORT_TITLE=Uninstallation Aborted
-MUI_UNTEXT_ABORT_SUBTITLE=Uninstall was not completed successfully.
-MUI_UNTEXT_FINISH_INFO_TITLE=Completing the $BrandFullNameDA Uninstall Wizard
-MUI_UNTEXT_FINISH_INFO_TEXT=$BrandFullNameDA has been uninstalled from your computer.\n\nClick Finish to close this wizard.
-MUI_UNTEXT_FINISH_INFO_REBOOT=Your computer must be restarted in order to complete the uninstallation of $BrandFullNameDA. Do you want to reboot now?
-MUI_UNTEXT_ABORTWARNING=Are you sure you want to quit $BrandFullName Uninstall?
deleted file mode 100755
--- a/im/locales/en-US/installer/override.properties
+++ /dev/null
@@ -1,86 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# LOCALIZATION NOTE:
-
-# This file must be saved as UTF8
-
-# Accesskeys are defined by prefixing the letter that is to be used for the
-# accesskey with an ampersand (e.g. &).
-
-# Do not replace $BrandShortName, $BrandFullName, or $BrandFullNameDA with a
-# custom string and always use the same one as used by the en-US files.
-# $BrandFullNameDA allows the string to contain an ampersand (e.g. DA stands
-# for double ampersand) and prevents the letter following the ampersand from
-# being used as an accesskey.
-
-# You can use \n to create a newline in the string but only when the string
-# from en-US contains a \n.
-
-# Strings that require a space at the end should be enclosed with double
-# quotes and the double quotes will be removed. To add quotes to the beginning
-# and end of a string enclose the string with an additional double quote at the
-# beginning and the end of the string (e.g. ""This will include quotes"").
-
-SetupCaption=$BrandFullName Setup
-UninstallCaption=$BrandFullName Uninstall
-BackBtn=< &Back
-NextBtn=&Next >
-AcceptBtn=I &accept the terms in the License Agreement
-DontAcceptBtn=I &do not accept the terms in the License Agreement
-InstallBtn=&Install
-UninstallBtn=&Uninstall
-CancelBtn=Cancel
-CloseBtn=&Close
-BrowseBtn=B&rowse…
-ShowDetailsBtn=Show &details
-ClickNext=Click Next to continue.
-ClickInstall=Click Install to start the installation.
-ClickUninstall=Click Uninstall to start the uninstallation.
-Completed=Completed
-LicenseTextRB=Please review the license agreement before installing $BrandFullNameDA. If you accept all terms of the agreement, select the first option below. $_CLICK
-ComponentsText=Check the components you want to install and uncheck the components you don't want to install. $_CLICK
-ComponentsSubText2_NoInstTypes=Select components to install:
-DirText=Setup will install $BrandFullNameDA in the following folder. To install in a different folder, click Browse and select another folder. $_CLICK
-DirSubText=Destination Folder
-DirBrowseText=Select the folder to install $BrandFullNameDA in:
-SpaceAvailable="Space available: "
-SpaceRequired="Space required: "
-UninstallingText=$BrandFullNameDA will be uninstalled from the following folder. $_CLICK
-UninstallingSubText=Uninstalling from:
-FileError=Error opening file for writing: \r\n\r\n$0\r\n\r\nClick Abort to stop the installation,\r\nRetry to try again, or\r\nIgnore to skip this file.
-FileError_NoIgnore=Error opening file for writing: \r\n\r\n$0\r\n\r\nClick Retry to try again, or\r\nCancel to stop the installation.
-CantWrite="Can't write: "
-CopyFailed=Copy failed
-CopyTo="Copy to "
-Registering="Registering: "
-Unregistering="Unregistering: "
-SymbolNotFound="Could not find symbol: "
-CouldNotLoad="Could not load: "
-CreateFolder="Create folder: "
-CreateShortcut="Create shortcut: "
-CreatedUninstaller="Created uninstaller: "
-Delete="Delete file: "
-DeleteOnReboot="Delete on reboot: "
-ErrorCreatingShortcut="Error creating shortcut: "
-ErrorCreating="Error creating: "
-ErrorDecompressing=Error decompressing data! Corrupted installer?
-ErrorRegistering=Error registering DLL
-ExecShell="ExecShell: "
-Exec="Execute: "
-Extract="Extract: "
-ErrorWriting="Extract: error writing to file "
-InvalidOpcode=Installer corrupted: invalid opcode
-NoOLE="No OLE for: "
-OutputFolder="Output folder: "
-RemoveFolder="Remove folder: "
-RenameOnReboot="Rename on reboot: "
-Rename="Rename: "
-Skipped="Skipped: "
-CopyDetails=Copy Details To Clipboard
-LogInstall=Log install process
-Byte=B
-Kilo=K
-Mega=M
-Giga=G
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/amazondotcom.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.com</ShortName>
-<Description>Amazon.com Search</Description>
-<InputEncoding>ISO-8859-1</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAC0AQAAJgAAACAgAAAAAAAA6QIAANoBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAF7SURBVDjLlZPLasJAFIaFRF+iVV+h6hO0GF+gVB9AaHwDt64qCG03tQgtdCFIuyhUelmGli66MXThSt24kNiFBUlAYi6ezjnNxSuawB/ITP7v/HNmJgQAEaZzpgHs/gwcTyTEXuXl2U6nA8ViEbK5HKler28CVRAwnB9ptVrAh8MrQuCaZ4iA8fzIqSgCxwzpTIaSuN/RWGwdYLwCUBQFZFkGSZLgqdmEE7YEN8VOAKyaSKUW4nNBAFmnYiKZpDRX1WqwBBzP089n5f/NEQsFL4WqqtsBWJlzDAJr5PwSMM1awEzzdxIbGI3Hvc6jCZeVFgRQRwpY7Qcw3ktgfpR8wLRxCPaot/X4GS95MppfF6DX9n2A3f+kAZycaT8bAZjU6r6B/duD6d3BYg9wQq/tkYzHY1blEiz5lmQyGc95mrO6r2CxgpjCBXgNsJVviolpXJiraeOIjJRE10juUa4sR8V+mO17VvmGqtuOcdNlwut8zTQJcJ0njifyB2bgTdKh6w4BAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACsElEQVRYw71XQWsTURBe2LQgeNKLB+tVemt6txcteNSD/QGC6VEIGDx5s+eKPQqFgJhLNdFLBWMP7cU0oSAWjB70koC9WHbVQ5SO8+XtS14mr7svyaYDH9m87Jv55puZt1nPi4yIzjMeMj7T9OwjI88455nGC1cZX+nsDESumJmPFDwIAqrX6z00Gg1qt9vjkJgFgUeuO16Vy3RjeZkyMzM9+MY1fsM9I9h9zyV7ZAznZrA4FAoFVwJ1z+WuOysrg1lnMolkHJX4k0igzI5sARYWF7vEZEk0rvO6iyUSuJfLJUqM7zYSqRDIra4OOUZPmNZsNrsl8UVTpkJAjh1GzmaSpJ8mAWmYeZB5urHRhW5SNOfUCCDo47W1bvPZsp2qAhipy3Nz1kaLG8dUCEBqM5AvpgElqFar01NgIZsdco7Zb7VasU2YigIYL5tjqCL7Q5YkFQXKlcqQ7DbHthIALk/IWAKor82xPIhshxWABCYioDMz51sexcVi0XoG4DPLIyvJjkTArK3scDQnRvO0MdTrUHGiKZCP4tNgO6BAEI08EQH9Z2Qow0hyPypJGIa9p6JWKCn4SA8jSKmJIDgyRvPJkcRxjfUwNGr/i8+Mo32iHzWiThBD4NM60bet9P77/ubA728RlTjMiwiH6zEEfvIrwdZFtQmMJ7W/ofIDBZD5m3mVZGwJcOP2kmILIlCkE45HoPWurwCSg0+UQRD4ZyXxId+T7gQb9+4q9sioY5ltrOG3L5vqXiiJffDx/aUi83ZJ7jr2ohcEu8Hh6/m+I7OWGiVxbWKHsz+O3vSOakqFQdsFgQeJUiKD7Wv9YKXBgCeSUC3v2kM5EJhlHDh3NcgcPlG1BXZu98sDmTuBa4fsMnz9fniJUaGzs+eMC540XuR0aDO2L8Y3qPyMcdOM+R/8XcqRA3qp9gAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.com/exec/obidos/external-search/" rel="searchform">
-  <Param name="field-keywords" value="{searchTerms}"/>
-  <Param name="mode" value="blended"/>
-  <Param name="tag" value="instantbird-20"/>
-  <Param name="sourceid" value="Instantbird-search"/>
-</Url>
-</SearchPlugin>
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/answers.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Answers.com</ShortName>
-<Description>Dictionary Search on Answers.com</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////K////4f////E////5f///+n////P////mv///0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////fv///+//////////////////////7NnP/+LFtv/////+////of///xYAAAAAAAAAAAAAAAD///8D////lf////////////j0//bi1v/OlXf/tGU9/6FCEv/OmH3////////////////D////FgAAAAAAAAAA////avPm4P/evaz/8NbI//7r3//23M3/xYRi/5kzAP/Df1z//u/l//749P/v4dn/+PPw/////6j///8B////GP///+W/f1//smM7//bczf/+69///uvf/9ytlP+ZMwD/5se3/+/f1//AgmP/nj0N/927qv/////+////QP///2z/////8NvQ/8WCYP/+69///uvf//7r3/+7ckz/pUkb/9m1ov+ePQ3/okUW/8+fh//38O3//////////5r///+t//////7y6v/Cflv/58Cr//DRwP/mwKv/okQU/8ODYv/cuqj/yZN4//Tq5f/+9e///vDn///////////Q////yf/////+7+b/05yA/65ZLv+9dVD/sF40/5kzAP/kvKb//vTu//Tr5v/7+Pb//vfz//707f//////////6f///8X//////vDm/+K4ov/KjGz//ure/8uNbf+jRBX/+OTX/+3b0v+jSBr/pk0h/717Wv/Wrpr//Pn4/////+b///+i//////7z7f/02Mj/wn5b//vl2P+uWS7/vXhU//v49//48u//1q6a/717Wv+oUSb/tWxH//jz8P/////K////V///////+/j//ure/8aFZP/fs5v/oEAQ/9q1o/+zaEL/1ayX//718P/+9/P/+PHu//jz8P//////////h////wr////O///////38v/YpYr/tGQ7/6ZLHf/06eX/s2dB/549Df/x49z//vDn//7x6f//////////8////yoAAAAA////R/////v/////7dXI/5kzAP+7cUv//vHp/+vYzv+bNwX/vHlY//38/P///////////////30AAAAAAAAAAAAAAAD///9n////+/z5+P++e1n/3LGc//7w5//++PT/0KKL/8OIa//9/Pv//////////5X///8GAAAAAAAAAAAAAAAAAAAAAP///0n////K///////////////////////////+/v7/////5v///2z///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Cv///1f///+g////xP///8n///+r////bP///xoAAAAAAAAAAAAAAAAAAAAA+B////AH///AA///wAH//4AB//+AAP//AAD//wAA//8AAP//AAD//4AA//+AAf//wAP//+AD///wD////D///w==</Image>
-<Url type="text/html" method="GET" template="http://www.answers.com/main/ntquery">
-  <Param name="s" value="{searchTerms}"/>
-  <Param name="gwp" value="13"/>
-</Url>
-<SearchForm>http://www.answers.com/</SearchForm>
-</SearchPlugin>
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/creativecommons.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Creative Commons</ShortName>
-<Description>Find photos, movies, music, and text to rip, sample, mash, and share.</Description>
-<InputEncoding>utf-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJUSURBVDiNjZO9S1thGMXPvTfJFbnkipNkLLS0ksFg0M0lf4CboNCEgIIg/RiKtEOn0qGWTtbVoBYcIji10I9J0ApWCjp0kRaXdhHjTW4+uGnur4NJ8GOwZ3nf4TnnfZ5z3scAdBGGYdyVdN+yrGHTNNOtVqsVhuG+pO+S3gE/LtV3BIxzPDJNc8FxHGN0dNRKpVIGoJ2dndr+/r5Vr9cl6bmkN0AoSQIEyHXdj5KYnZ3F932uolKpkM/nK5KQ9FmSCZwLOI7zQBLr6+vXiFdRLBaDtsiTTve3YrFYkM/nbyR3MDU1dSKpLumO+vr6Xruui+d5AFSrVVZWVtjY2KDRaABwdHTE4uIie3t7AJTLZaLRaFXSCyUSid1MJgOA53n09/eTTqdJJpPMzc2xurqKbduMj48Tj8fZ3d0FYHBw8FjSezmOU56fnwdgeXkZ27ap1WpUKhWazSZjY2Nks1kASqVSd4zp6eljSX/MtiHdRDpnEATyfb+bkiSVSqXu3TCM8xgHBga+dkY4OzvDdV2GhoZIJBLMzMxQKBSIRqNkMhlisRhbW1sAJJPJn5I+KB6Pv7poou/7rK2tsbm5SRAEXROXlpY4ODgAoFarYdu2J+llN8ZcLvffMeZyud+SGpLuCVBPT89jSRQKhRvJxWKxISmU9JTOT5Rk9Pb2fpHE5OQkJycn14inp6dMTEx4bdM/SbKAy8sk6WEkElmwLCuSSqUYGRmxgHB7e7t+eHgYazabgaRnkt7SeZnr63xbUtYwjGHTNNNhGP4F9iR9a6/zr4v1/wDE1D9XlC4rrAAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="http://search.creativecommons.org/">
-  <Param name="q" value="{searchTerms}"/>
-  <Param name="sourceid" value="Instantbird-search"/>
-</Url>
-<SearchForm>http://search.creativecommons.org/</SearchForm>
-</SearchPlugin>
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/ddg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
-  <ShortName>DuckDuckGo</ShortName>
-  <Description>Search DuckDuckGo</Description>
-  <InputEncoding>UTF-8</InputEncoding>
-  <Image height="16" width="16">data:image/icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11RgALs6oACbQ9wAj0v8AI9L/ACfQ9wAu0agANdUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzN4CNdL/oK/z//////////////////////+jsPv/BDXX/wAz0t4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyzvNSduD//////8jK/v+P+Lf/IbQL/17RPP+J3Y//wOKX//////9YeuX/ADLO8wAAAAAAAAAAAAAAAAAw091piOX/8/X9/1Fx5P9xhu//WOWZ/0W9Lv9Lwjn/J8BB/xyDAP9bdfL/9fP//2mI5v8AMNPdAAAAAAc610YRQ9f//////0Zr4P8AGdD/sb32////////////wrv//wAh1/8MPab/ACPc/05r4///////EkPX/wc610YANtWkrr/y/6S48P8AJ9L/AB3R/+/w/v///////////3+D7f8AQeL/AYTw/wFr5/8AMNb/p7Tv/6698v8AM9WkADLW//////8yXt//AC3V/wAw1/////////////z///8A0P7/AKb1/wWI7P8AuPf/AJ3w/zZW3P//////ADHV/wAx2P//////AzrZ/wAu1/84ZOL////////////e////AND//wC1+f8Atff/AZbv/wY62f8ELNf//////wAw1/8AMtn//////wAw2f8ALNn/kKrz////+//cwbH////////////R////Rcb8/wDO/f8A/P//AHzo//////8AMNj/ADXa//////8vXuL/ACna/4yq9///79T/jUkg/9i+r///////r2Q0/7Cozv8BKdr/AirY/zdZ4P//////ADTa/wI72tOuv/T/prr0/wAl2v+JqPb//7yW/+bUxv/9+/n////u//W+n/+Op/L/ADPd/wAv2v+ru/T/r7/0/wI72tMLQd1DEEjg//////9Cbef/ADng///////////////////////R3///AC3g/wAy3v9SeOn//////xFI4P8LQd1DAAAAAAM64PNmiuz/9/j//2mN7f/m7P3///////////9Cb+n/ACXd/wAt3v9rju3//////2iL7P8DOuDzAAAAAAAAAAAAAAAAAT3g/0p16f//////3OT8/3OS7v8AKt3/ACPc/zhn5/+xw/b//////0956v8CPeD/AAAAAAAAAAAAAAAAAAAAAAAAAAAEPODzBUDh/5uz8//7/f7/////////////////prz0/wtF4v8FQeDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtF5kYDQOOkADrj/wA44v8AOeP/ADzk/wVB46QPReZGAAAAAAAAAAAAAAAAAAAAAPAPAADgBwAAwAMAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAADAAwAA4AcAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChIzyAnRNFwJ0TQryND0d8nRNH/J0TR/ydE0f8nRNH/I0PR3ydE0K8nRNFwKEjPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChE00AlRdK/J0XS/ydF0v8nRdL/XXPd/11z3f94i+P/k6Lp/5Oi6f9rf+D/NVDV/ydF0v8nRdL/JUXSvyhE00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAzxAnRNOvJ0XT/ydF0/8lRdK/KEXSYOvu+6/+/v6//v7+v/39/c////////////7+/r/J0fOAKEXSYCVF0r8nRdP/J0XT/ydE068gQM8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlRdUwJ0bT7ydG0/8nRtHPKETTQAAAAADHx8dA2vHhn5TYpN/o9+z/////////////////8PL83ydG0o8lRdUwAAAAAChE00AnRtHPJ0bT/ydG0+8lRdUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEXVYCdG1P8nRtT/KEbTgAAAAAAmRtZQI0PU38jIyP/F6s//Rrtk/0a7ZP9/yIr/c796/4vLkv+JpNf/M3Kq/zyWh/8zeKTfJkbWUAAAAAAoRtOAJ0bU/ydG1P8oRdVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVF1TAnR9X/J0fV/yhF1WAgQM8QJ0fTrydH1f9CW8//2tra/6Pdsv9Gu2T/Rrtk/0WzWv9Gu2T/Rrtk/0a7ZP9Gu2T/Rrtk/z6egP8nR9X/J0fTryBAzxAoRdVgJ0fV/ydH1f8lRdUwAAAAAAAAAAAAAAAAAAAAAAAAAAAgQM8QJ0fV7ydH1f8oSNVgIEDPECdH1c8nR9X/J0fV/1xwyf/t7e3/o92y/0a7ZP9Gu2T/Ra5U/0a7ZP9Gu2T/Rrtk/0a7ZP9Gu2T/Pp6A/ydH1f8nR9X/J0fVzyBAzxAoSNVgJ0fV/ydH1e8gQM8QAAAAAAAAAAAAAAAAAAAAACdH1q8nR9b/KEjVgCBQzxAnR9bPJ0fW/ydH1v8nR9b/gIzB//r6+v+j3bL/Rrtk/13Ed/+i26//ruG7/z6egf8+noH/Rrtk/0a7ZP86kI//J0fW/ydH1v8nR9b/J0fWzyBQzxAoSNWAJ0fW/ydH1q8AAAAAAAAAAAAAAAAoSNdAJkjW/yZH1s8AAAAAJEfWryZI1v8mSNb/JkjW/yZI1v+jqsT//////+j37P/R7tj////////////W3ff/JkjW/yZI1v8uZbr/PJeI/zJzrP8mSNb/JkjW/yZI1v8mSNb/JEfWrwAAAAAmR9bPJkjW/yhI10AAAAAAAAAAACVI1r8mSNf/KEjXQCZJ1lAmSNf/JkjX/yZI1/8mSNf/JkjX/9HR0f///////////////////////////5Ok6/8mSNf/JkjX/yZI1/8mSNf/JkjX/yZI1/8mSNf/JkjX/yZI1/8mSNf/JknWUChI10AmSNf/JUjWvwAAAAAoSNcgJknY/yZH2M8AAAAAI0nY3yZJ2P8mSdj/JknY/yZJ2P9KZM//39/f////////////////////////////XHfi/yZJ2P8mSdj/JknY/yZJ2P8mSdj/JknY/yZJ2P8mSdj/JknY/yZJ2P8jSdjfAAAAACZH2M8mSdj/KEjXICdJ2HAmSdj/JUjXYCVK2jAmSdj/JknY/yZJ2P8mSdj/JknY/2V4yf/t7e3///////////////////////////9cd+L/HXTj/xSf7/8Nwfj/CdL8/wnS/P8J0vz/ELDz/xt85v8mSdj/JknY/yZJ2P8lStowJUjXYCZJ2P8nSdhwJErZryZK2f8oSNcgJUnajyZK2f8mStn/JkrZ/yZK2f8mStn/iJPA////////////////////////////0ff+/xjV/P8J0vz/Drn1/xiO6/8Yjuv/GI7r/xCw8/8Lyvr/CdL8/xmF6P8mStn/JkrZ/yVJ2o8oSNcgJkrZ/yRK2a8jStrfI0rZ3wAAAAAlSdq/Jkra/yZK2v8mStr/Jkra/yZK2v+xtsf///////////////////////////8o2Pz/CdL8/wvK+v8mStr/Jkra/yZK2v8mStr/Jkra/yZK2v8iW97/Jkra/yZK2v8mStr/JUnavwAAAAAjStnfI0ra3yZK2v8lSdq/AAAAACZH2O8mStr/Jkra/yZK2v8mStr/L1HY/9HR0f///////////////////////////yjY/P8J0vz/CdL8/xCw9P8QsPT/ELD0/xSf7/8ddeX/Jkra/yZK2v8mStr/Jkra/yZK2v8mR9jvAAAAACVJ2r8mStr/Jkvb/yVJ2r8AAAAAJkvb/yZL2/8mS9v/Jkvb/yZL2/9KZtL/4+Pj////////////////////////////4Pn//0fd/f8J0vz/CdL8/wnS/P8J0vz/CdL8/wnS/P8Lyvr/Fpfu/yJc3/8mS9v/Jkvb/yZL2/8AAAAAJUnavyZL2/8mS9z/JUncvwAAAAAmS9z/Jkvc/yZL3P8mS9z/Jkvc/26AyP/x8fH//////////////////////////////////////9H3/v/C9P7/o+7+/2fa+/8Oufb/CdL8/wnS/P8J0vz/CdL8/xiP7P8mS9z/Jkvc/wAAAAAlSdy/Jkvc/yZM3P8lTNy/AAAAACZJ2e8mTNz/Jkzc/yZM3P8mTNz/iJTB////////////qnth/5VaOf/x6eX///////////////////////Hp5f/x6eX/ydL2/yZM3P8kVN7/G37o/xKo8v8QsfT/HXbm/yZM3P8mSdnvAAAAACVM3L8mTNz/I0vc3yZJ2u8AAAAAJUzevyZM3f8mTN3/Jkzd/yZM3f+fqc3///////////+VWjn/v5yI/+re1///////////////////////jk8s/7iRe//J0vb/Jkzd/yZM3f8mTN3/Jkzd/yZM3f8mTN3/Jkzd/yVM3r8AAAAAI0vc3yNL3N8kTd2vJk3d/yhQ3yAlTd2PJk3d/yZN3f8mTd3/Jk3d/6St0v////////////Hp5f/q3tf///////////////////////////+xhm7/49PK/6Cx8P8mTd3/Jk3d/yZN3f8mTd3/Jk3d/yZN3f8mTd3/JU3djyhQ3yAmTd3/JE3drydN33AmTd7/J03fcCVK3zAmTd7/Jk3e/yZN3v8mTd7/pK7S///////Sp5r/////////////////////////////////////////////////T27k/yZN3v8mTd7/Jk3e/yZN3v8mTd7/Jk3e/yZN3v8lSt8wJ03fcCZN3v8nTd9wKFDfICZO3/8mTt3PAAAAACVN3r8mTt//Jk7f/yZO3/+EltX//////+fRyv/SqaD/59LO///////////////////////at63/vIBy/7Glxf8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8mTt//JU3evwAAAAAmTt3PJk7f/yhQ3yAAAAAAJE/dryZO3/8oUN9AKFDfQCZO3/8mTt//Jk7f/zhb2v/o6/T/////////////////////////////////////////////////XHrn/yZO3/8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8oUN9AKFDfQCZO3/8kT92vAAAAAAAAAAAoUN9AJk7g/yZO4M8AAAAAJk/hnyZO4P8mTuD/Jk7g/05v5v/k6fv//////////////////////////////////////3eR7P8mTuD/Jk7g/yZO4P8mTuD/Jk7g/yZO4P8mTuD/Jk/hnwAAAAAmTuDPJk7g/yhQ30AAAAAAAAAAAAAAAAAjT+GfJU/h/yVO4Y8gUN8QIk7gzyVP4f8lT+H/SWnW/0lp1v+bq+H/8fHx/////////////////6Cy8v9OcOb/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yJO4M8gUN8QJU7hjyVP4f8jT+GfAAAAAAAAAAAAAAAAAAAAACBQ3xAlTOHvJU/h/yVQ4mAgUN8QIk7hzyVP4f+ktOv///////////////////////H0/f9phur/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yVP4f8iTuHPIFDfECVQ4mAlT+H/JUzh7yBQ3xAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ3zAlUOLvJVDi/yVQ4mAgUN8QI1Din4mb2//J0/j/ydP4/6299P93ku3/M1vk/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/I1DinyBQ3xAlUOJgJVDi/yVQ4u8lUN8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAlUOLvJVDi/yVQ4o8AAAAAJFDjQCVQ4r8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDivyRQ40AAAAAAJVDijyVQ4v8lUOLvJVDkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAjUeTfJVHj/yNR5N8kUONAAAAAACVQ5DAmUuOAJVHivyNR5N8lUeP/JVHj/yNR5N8lUeK/JlLjgCVQ5DAAAAAAJFDjQCNR5N8lUeP/I1Hk3yVQ5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBQ3xAjUuSfJVHk/yVR5P8jUeTfJFLkcChQ5yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoUOcgJFLkcCNR5N8lUeT/JVHk/yNS5J8gUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkUONAI1LknyVS5P8lUuT/JVLk/yVS5O8lUeS/JVHkvyVR5L8lUeS/JVLk7yVS5P8lUuT/JVLk/yRS468kUONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFDfECVS5GAjUuWfIlPlzyVS5f8lUuX/JVLl/yVS5f8iU+XPI1LlnyVS5GAgUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/ggBB/wgAEP4AAAB8AAAAPAAAADiAAAEYAAAAEQAAAIAAAAAAAAAAAgAAAEIAAABCAAAAQgAAAEIAAABCAAAAQAAAAAAAAAABAAAAiAAAABiAAAEcAAAAPAAAAD4AAAB/CAAQ/4IAQf/AfgP/8AAP//wAP/</Image>
-  <Url type="text/html" method="get" template="https://duckduckgo.com/" rel="searchform">
-    <Param name="q" value="{searchTerms}"/>
-  </Url>
-  <Url type="application/x-suggestions+json" template="https://ac.duckduckgo.com/ac/">
-    <Param name="q" value="{searchTerms}"/>
-    <Param name="type" value="list"/>
-  </Url>
-</OpenSearchDescription>
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/google.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Google</ShortName>
-<Description>Google Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn///////////////////////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZp/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD///////9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v///////////////////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAAAAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj///8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gn9/f2K/f39+////////////////////////////////////////////////////////////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4k/f390v////////////////////////////////////////////////////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q/////////////////////+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf///////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390//////////////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAAAP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcAAAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP//////////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LHj/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P/////////////////////////////////////////////8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln////////////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z///////////////////////////////////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg///////////////////////+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w//////////////////////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL//vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7/fr//////////////////////////////////////////////////////////////////ere//SFQv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rIqv/////////////////9/f3q/f39+v///////////////we9+/8FvPv/Bbz7/wW8+/993P3///////////////////////////////////////SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+cGf//////////////////39/fn9/f36////////////////B737/wW8+/8FvPv/Bbz7/33c/f//////////////////////////////////////9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6xaX//////////////////f39+f39/e3///////////////8cwvv/Bbz7/wW8+/8FvPv/WdP8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vVv//////////////////9/f3q/f39y////////////////0bN/P8FvPv/Bbz7/wW8+/8hrvn/+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/cj9/f2c////////////////ht/9/wW8+/8FvPv/FZP1/zRJ6/+zuPf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39mf7+/lr////////////////d9v7/B7n7/yB38f81Q+r/NUPq/0hV7P/u8P3////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v5X////D/39/ff///////////////9tkPT/NUPq/zVD6v81Q+r/NUPq/2Fs7//y8v7////////////////////////////////////////////09f7//////////////////////////////////////////////////f399f7+/g0AAAAA/f39n////////////////+Tm/P89Suv/NUPq/zVD6v81Q+r/NUPq/1Bc7f/IzPn/////////////////////////////////x8v5/0xY7P+MlPP////////////////////////////////////////////9/f2cAAAAAAAAAAD+/v4n/f39/P///////////////7W69/81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9ZZe7/k5v0/6609/+vtff/lJv0/1pm7v81Q+r/NUPq/zVD6v+GjvL//v7//////////////////////////////f39+/7+/iQAAAAAAAAAAAAAAAD9/f2N/////////////////////6Cn9f81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v+BivL////////////////////////////9/f2KAAAAAAAAAAAAAAAAAAAAAP7+/gv9/f3V/////////////////////7W69/8+S+v/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/P0zr/7q/+P///////////////////////f390v7+/gkAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3r/////////////////////+Xn/P94gfH/NkTq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NkTq/3Z/8f/l5/z///////////////////////39/er+/v4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f3r///////////////////////////k5vz/nqX1/2p08P9IVez/OEbq/zdF6v9GU+z/aHLv/5qh9f/i5Pz////////////////////////////9/f3q////MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3V/////////////////////////////////////////////////////////////////////////////////////////////////f390v7+/iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr9/f2N/f39/P///////////////////////////////////////////////////////////////////////////f39+/39/Yv+/v4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4n/f39n/39/ff//////////////////////////////////////////////////////f399v39/Z3+/v4lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Dv7+/lr9/f2c/f39y/39/e39/f36/f39+v39/ez9/f3L/f39nP7+/ln+/v4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP/</Image>
-<Url type="text/html" method="GET" template="https://www.google.com/search" rel="searchform">
-  <Param name="q" value="{searchTerms}"/>
-  <Param name="ie" value="utf-8"/>
-  <Param name="oe" value="utf-8"/>
-</Url>
-</SearchPlugin>
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/list.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-amazondotcom
-answers
-creativecommons
-google
-wikipedia
-yahoo
-ddg
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/wikipedia.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Wikipedia (en)</ShortName>
-<Description>Wikipedia, the free encyclopedia</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAA4AQAAJgAAACAgAAAAAAAAJAMAAGQBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAEFSURBVDjLxZPRDYJAEESJoQjpgBoM/9IBtoAl4KcUQQlSAjYgJWAH0gPmyNtkzEEuxkQTPzawc3Ozc3MQTc/JfVPR/wW6a+eKQ+Hyfe54B2wvrfXVqXLDfTCMd3j0VHksrTcH9bl2aZq+BCgEwCCPj9E4TdPYGj0C9CYAKdkmBrIIxiIYbvpbb2sSl8AiA+ywAbJE5YLpCImLU/WRDyIAWRgu4k1s4v50ODru4haYSCk4ntkuM0wcMAINXiPKTJQ9CfgB40phBr8DyFjGKkKEhYhCY4iCDgpAYAM2EZBlhJnsZxQUYBNkSkfBvjDd0ttPeR0mxREQ+OhfYOJ6EmL+l/qzn2kGli9cAF3BOfkAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAIKSURBVFjD7ZdBSgNRDIYLguAB7FLwAkXwBl0JgiDYjQcY8ARduBJKu3I5C0EoWDxAT9AL9AK9QBeCIHQlCM/3DZOSmeZNZ2r1bQyEGV7yXv7kJZlJq6XIOXfs+crzwPPTnvnR863n05ZFufDD/T595Q4eauM37u/pWYwfeX53cegcABcuHg0AkEQE8AKAu4gAXv8BrAEMh0PXbrddt9t1vV4v406nk62laeqm02n2LjKYIuK5WCyyfeiLDF32yLn6TJ5mBFarlev3+9nBMMqsabkYhmezWcEd2ctTE/tYBwhgt14BhtmAV2VaLpdrAHioCW+VdwWy9IMAUBQjJcQFTwGqvcTD+Xy+oc8askZJyAYrnKEokCeWLpQkSSZvBIANYgSDVVEQQJaeyHQu1QIgiQNb6AmrTtaQ9+RFSLa1D4iXgfsrVITloeSFFZlaAEjAUMaXo2DJWQtVRe1OKF5aJUkf0NdglXO5VzQGoI2USwwD3LEl590CtdO3QBoT5WSFV+Q63Oha17ITgMlkslGSGBWPdeNiDR2SL1B6zQFINmOAkFOW5eTSURCdvX6OdUlapaWjsKX0dgOg26/VWHSUKhrPz35ISKwq76R9Wx+kKgC1f0o5mISsypUG3kPj2L/lDzKYvEUwzoh2JtPRdQQAo1jD6afne88H1oTMeH6ZK+x7PB/lQ/CJtvkNEgDh1dr/bVYAAAAASUVORK5CYII=</Image>
-<Url type="text/html" method="GET" template="https://en.wikipedia.org/wiki/Special:Search" rel="searchform">
-  <Param name="search" value="{searchTerms}"/>
-  <Param name="sourceid" value="Instantbird-search"/>
-</Url>
-</SearchPlugin>
deleted file mode 100644
--- a/im/locales/en-US/searchplugins/yahoo.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Yahoo</ShortName>
-<Description>Yahoo Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAEACAA8DQAAJgAAACAgAAABAAgAowsAAGINAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAJcEhZcwAACxMAAAsTAQCanBgAAApPaUNDUFBob3Rvc2hvcCBJQ0MgcHJvZmlsZQAAeNqdU2dUU+kWPffe9EJLiICUS29SFQggUkKLgBSRJiohCRBKiCGh2RVRwRFFRQQbyKCIA46OgIwVUSwMigrYB+Qhoo6Do4iKyvvhe6Nr1rz35s3+tdc+56zznbPPB8AIDJZIM1E1gAypQh4R4IPHxMbh5C5AgQokcAAQCLNkIXP9IwEA+H48PCsiwAe+AAF40wsIAMBNm8AwHIf/D+pCmVwBgIQBwHSROEsIgBQAQHqOQqYAQEYBgJ2YJlMAoAQAYMtjYuMAUC0AYCd/5tMAgJ34mXsBAFuUIRUBoJEAIBNliEQAaDsArM9WikUAWDAAFGZLxDkA2C0AMElXZkgAsLcAwM4QC7IACAwAMFGIhSkABHsAYMgjI3gAhJkAFEbyVzzxK64Q5yoAAHiZsjy5JDlFgVsILXEHV1cuHijOSRcrFDZhAmGaQC7CeZkZMoE0D+DzzAAAoJEVEeCD8/14zg6uzs42jrYOXy3qvwb/ImJi4/7lz6twQAAA4XR+0f4sL7MagDsGgG3+oiXuBGheC6B194tmsg9AtQCg6dpX83D4fjw8RaGQudnZ5eTk2ErEQlthyld9/mfCX8BX/Wz5fjz89/XgvuIkgTJdgUcE+ODCzPRMpRzPkgmEYtzmj0f8twv//B3TIsRJYrlYKhTjURJxjkSajPMypSKJQpIpxSXS/2Ti3yz7Az7fNQCwaj4Be5EtqF1jA/ZLJxBYdMDi9wAA8rtvwdQoCAOAaIPhz3f/7z/9R6AlAIBmSZJxAABeRCQuVMqzP8cIAABEoIEqsEEb9MEYLMAGHMEF3MEL/GA2hEIkxMJCEEIKZIAccmAprIJCKIbNsB0qYC/UQB00wFFohpNwDi7CVbgOPXAP+mEInsEovIEJBEHICBNhIdqIAWKKWCOOCBeZhfghwUgEEoskIMmIFFEiS5E1SDFSilQgVUgd8j1yAjmHXEa6kTvIADKC/Ia8RzGUgbJRPdQMtUO5qDcahEaiC9BkdDGajxagm9BytBo9jDah59CraA/ajz5DxzDA6BgHM8RsMC7Gw0KxOCwJk2PLsSKsDKvGGrBWrAO7ifVjz7F3BBKBRcAJNgR3QiBhHkFIWExYTthIqCAcJDQR2gk3CQOEUcInIpOoS7QmuhH5xBhiMjGHWEgsI9YSjxMvEHuIQ8Q3JBKJQzInuZACSbGkVNIS0kbSblIj6SypmzRIGiOTydpka7IHOZQsICvIheSd5MPkM+Qb5CHyWwqdYkBxpPhT4ihSympKGeUQ5TTlBmWYMkFVo5pS3aihVBE1j1pCraG2Uq9Rh6gTNHWaOc2DFklLpa2ildMaaBdo92mv6HS6Ed2VHk6X0FfSy+lH6JfoA/R3DA2GFYPHiGcoGZsYBxhnGXcYr5hMphnTixnHVDA3MeuY55kPmW9VWCq2KnwVkcoKlUqVJpUbKi9Uqaqmqt6qC1XzVctUj6leU32uRlUzU+OpCdSWq1WqnVDrUxtTZ6k7qIeqZ6hvVD+kfln9iQZZw0zDT0OkUaCxX+O8xiALYxmzeCwhaw2rhnWBNcQmsc3ZfHYqu5j9HbuLPaqpoTlDM0ozV7NS85RmPwfjmHH4nHROCecop5fzforeFO8p4ikbpjRMuTFlXGuqlpeWWKtIq1GrR+u9Nq7tp52mvUW7WfuBDkHHSidcJ0dnj84FnedT2VPdpwqnFk09OvWuLqprpRuhu0R3v26n7pievl6Ankxvp955vef6HH0v/VT9bfqn9UcMWAazDCQG2wzOGDzFNXFvPB0vx9vxUUNdw0BDpWGVYZfhhJG50Tyj1UaNRg+MacZc4yTjbcZtxqMmBiYhJktN6k3umlJNuaYppjtMO0zHzczNos3WmTWbPTHXMueb55vXm9+3YFp4Wiy2qLa4ZUmy5FqmWe62vG6FWjlZpVhVWl2zRq2drSXWu627pxGnuU6TTque1mfDsPG2ybaptxmw5dgG2662bbZ9YWdiF2e3xa7D7pO9k326fY39PQcNh9kOqx1aHX5ztHIUOlY63prOnO4/fcX0lukvZ1jPEM/YM+O2E8spxGmdU5vTR2cXZ7lzg/OIi4lLgssulz4umxvG3ci95Ep09XFd4XrS9Z2bs5vC7ajbr+427mnuh9yfzDSfKZ5ZM3PQw8hD4FHl0T8Ln5Uwa9+sfk9DT4FntecjL2MvkVet17C3pXeq92HvFz72PnKf4z7jPDfeMt5ZX8w3wLfIt8tPw2+eX4XfQ38j/2T/ev/RAKeAJQFnA4mBQYFbAvv4enwhv44/Ottl9rLZ7UGMoLlBFUGPgq2C5cGtIWjI7JCtIffnmM6RzmkOhVB+6NbQB2HmYYvDfgwnhYeFV4Y/jnCIWBrRMZc1d9HcQ3PfRPpElkTem2cxTzmvLUo1Kj6qLmo82je6NLo/xi5mWczVWJ1YSWxLHDkuKq42bmy+3/zt84fineIL43sXmC/IXXB5oc7C9IWnFqkuEiw6lkBMiE44lPBBECqoFowl8hN3JY4KecIdwmciL9E20YjYQ1wqHk7ySCpNepLskbw1eSTFM6Us5bmEJ6mQvEwNTN2bOp4WmnYgbTI9Or0xg5KRkHFCqiFNk7Zn6mfmZnbLrGWFsv7Fbou3Lx6VB8lrs5CsBVktCrZCpuhUWijXKgeyZ2VXZr/Nico5lqueK83tzLPK25A3nO+f/+0SwhLhkralhktXLR1Y5r2sajmyPHF52wrjFQUrhlYGrDy4irYqbdVPq+1Xl65+vSZ6TWuBXsHKgsG1AWvrC1UK5YV969zX7V1PWC9Z37Vh+oadGz4ViYquFNsXlxV/2CjceOUbh2/Kv5nclLSpq8S5ZM9m0mbp5t4tnlsOlqqX5pcObg3Z2rQN31a07fX2Rdsvl80o27uDtkO5o788uLxlp8nOzTs/VKRU9FT6VDbu0t21Ydf4btHuG3u89jTs1dtbvPf9Psm+21UBVU3VZtVl+0n7s/c/romq6fiW+21drU5tce3HA9ID/QcjDrbXudTVHdI9VFKP1ivrRw7HH77+ne93LQ02DVWNnMbiI3BEeeTp9wnf9x4NOtp2jHus4QfTH3YdZx0vakKa8ppGm1Oa+1tiW7pPzD7R1ureevxH2x8PnDQ8WXlK81TJadrpgtOTZ/LPjJ2VnX1+LvncYNuitnvnY87fag9v77oQdOHSRf+L5zu8O85c8rh08rLb5RNXuFearzpfbep06jz+k9NPx7ucu5quuVxrue56vbV7ZvfpG543zt30vXnxFv/W1Z45Pd2983pv98X39d8W3X5yJ/3Oy7vZdyfurbxPvF/0QO1B2UPdh9U/W/7c2O/cf2rAd6Dz0dxH9waFg8/+kfWPD0MFj5mPy4YNhuueOD45OeI/cv3p/KdDz2TPJp4X/qL+y64XFi9++NXr187RmNGhl/KXk79tfKX96sDrGa/bxsLGHr7JeDMxXvRW++3Bd9x3He+j3w9P5Hwgfyj/aPmx9VPQp/uTGZOT/wQDmPP8YzMt2wAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACZ0lEQVR42mzSP4icZRTF4ee+38xOkp2sG5cQxVJIIaaKkICxTkqJjQhpJFYiop2F1YKFQqoUVpEoCBYSS7dfOxVFWGIsokUE/0TEye7OzPe977XYNWk83b0cDoffvXHWGxkKYjt0N1fi+FaJIzNIFSJ0kDXn0z5nF1O9Sp5PzaizamLD2NELo5W4sOwXqqX/04o1R2wg9PYs/GXUmTjqpGNxwvWdFzz19Akvjj+XUkYTggylFLfml93due+tZ7+y577BrkJnbNWke8yHmzvgi/4lq+WU1XjCsThl2p1ya3GZ4KNrt03KuhXH0SkkkbTOL5+u2PnuZ/D8axtGMTaKsbOvrINP3v/W3Y9XhCJjQCrUWRedVpaq3nvn7oHXrz8jD8PfvnEGbL0716LXytIoxqizkups4R/VwhB7hpi7sXkbXNo86bkrazK5sXnbEHND7BvMLcykOotz3vlxvZw+faRb08VEiVC64rPdSw/pZ/Ly9EutNi3TkHOLOvN3u3OnHNx7MFio5qq5Ifdce/WHhwEfXPnekPuq/UPPQhrAKOV0MFdyRFQFRefr7Z9wRrb0zfYd1aCpGmr2BvtSTkcp1wZLnX0tx4oQjeHX+UF97P75QGspM7VMqTfopVwb0aY1F4ZWlFK1SCVDHQKUEvphj0ztkEdrvZoLtOkoNS2XlkHJIlroIky7Jw8atDSJdQ/aPTUdtJBaLqVmlJpqQataCZKhY/L4HwcEI/Qbv1v8tivbIdVG1UtNnPVmFmPEoT9l/Dc9Ujp42Mx4uGl6I5pmgdjGzaLbopsdJqZHWZnqtKkXcZU8D/8OAPAMQ4kD8KK1AAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8OokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAAAlwSFlzAAALEwAACxMBAJqcGAAAByVJREFUWAm1l1uIldcVx9d3ruMZZzRaay+pCjFJH6LSRqxQqA1NH0pBiH3Qp774kEAg4EOkxKdQSCjUFvpm6YsNVNoSaGjFtmga2yZgCIIawdv04g2kM7Uz6lzO+c758v/t/9lzTB/61Oxhn7332muv9V+3vb8pnooDVRkzZ4oY/LmK6mQZa05frX6yFJ9Ae7x4qd2IuV1FFM9WMfhaI9Z+pQBAL+aiEZ0QgNBm2YuZmxHF9VZMXqmivFaLweUyuteWYvHGVPWr2f+F7YvF/ola9DZGVJsHUXs8YvBEK1ZrXt9URDwqxY1BdGMQvWjGqkgA+iLUtazHuADUoowHYugKTilaR7SIpZjWqOMRfY090RbasS4JglpFtzWIcqwZa+pSqnWVcLLXijXpZCFpvbgb/VhMe8huMLPylWkci8/oSD8xJq7hj4WUWvXrlbqVrUyKtBYdpX3Bh9YbzsdErwRgbZKyFP+KdqxPssu4l2hDAOOxIj6bCHigKWRNCcpMCHHHB4TJLc+TXxKHnC51Ct+Qgxl/TZ0qE5Be/EdWTwjqQuJJAPIB8qAZk4kZoXJnvHH+27Hq0+0YX12PH+w7E3/8zbWkitN2M8pS7kCKZ761OV55c2fcm+nG7J1e7N/+e3m2nbyKQcAhnHWZLC86B1rxiFRvSIkIgJHFVWzZ+qk4fG5HEr4wV8buVb+Vuv5QeVZsi/HeW//eHZ1HbNfLT5+Jc2dndBav9KXugfqc+pLsv6Xxvk6kVheumnpDnXlTVMZWfHh+Li6cdOKvmGzEC69+WTskzwr1SfUJ9ZWp7z/0pWXlF9+ejQtnUdCWnAxQ+al5Tdz80lIVEP8x9eZQWCQwOTAhNc34Re+rUW8U0S+r2Ns8nWzBKgONBOeX3V3RaCpPRN7XeFcO7yYl+InML2U3VdBVHszHzbSXYLBJkuTSQzBuphoYZ7X/u8O30gFAHHxzi+Yop8ETcfDXW5JyKMd/fFuO9l3mYuwLAl5gbMg8QuKdYQg4Zjcxo7HikMeIn37vcizes9Ide9bGhs9NLPN9YX0ndnzHpbZ4vx9HXr6kc6Sobo2hIkuzOnIh0xMFRlvc0waWL+p3UePCQ/Myjjx/JSnl59CJbUkJgl75g+ZD/D978Yrc7EuMPe4ESo6OYsaasiiX7tADAyny5cGtyMHsDxzFnP0Tx6Z0SfsW27B1PHZ+c13seGZdbNo2Lo6Iu7e7cfznfxc/8ggNQBhZI9dSs2c5k+rFaHBXmZhd32xTGdlZPvzDvefj9XddlgeObYVpuf1o3zkpyrEnCJwBDjlmr9i7XP3jgrYkDamhEqRA8UOBxZ53tcOtBbgyzr53M65f8DU6sVZ1o067cfFBvP+XGzrDOa5s+JkTShIc+dBtlLOLlRpqAUDc+yqQMnViNq81edDVnPixno/vP/dXjn2svbbnPa1RiqXEHVkYQ06RWygnFEtpbZDLAJws2X1OHgfCv+hiRkZU8Y+pmbjwzjTE1D48PR1TV+5IMErgsjex2A8TJrqCHH9Cw6U0BGBkPUWrKTZnPq4L9WqIOFvEO8ml+vbRvyUB/Jw6OiUa9GydM58qQl6lTrNHyiENrwyTkOvXLziVkMlOOsesVKyIFtZB1zfDAGvdyj4xtkD7yHQ8Ynn4hCrwvYA+DOJCSlXAZl3MjNQobNzVPK7gJm0AiPsQyEg0c6s1cbEB5X08AmDz1TTLucApzHHyJgADvUqVysJMKOSicLRQl+emOIvbnaw+ot2pSTzl5zzJVjPaZ6ix7zCSN4E1shOAWnqbyYH8bOqd1h9AGJ0qtl6LRBubcBKxbo6xh60kWlbLjgG4NJ2ETkwqbl7SeUXVSCq+BF1C2bWEgEO4CxBGvOydGmu3ooXv7AEogLFqn2JtWKO8yc9xAmDxjhGiWMOQXe63zCvHtIjOpGOIwvGJlhRQepyzaiu0MQ4MnFhuT7CiJQC+sUg4jtOYO+1IH9OdCwgBSmOkP2r60CarHeXMjxw3PGyvOBnN670EgOPOc1yEYgDYCxbqTPDXki1srChi4R6lpQ+uDmVFDtkA5GH1qJEvQFgacqCFT37pyP+Y+DMJs0Y54NgbiIVn61jhEUrNARuNIi3vOQf8iUeQuNzILe4b/jFZ7RDYJhTbVRaJTxyWh8PgO93hQJCBsSa2GQyyoLlBzWDxgnm9l0JgADgNgVxElCH22xs4NCsaieSUyzWXaSTLDAPlGQB0Kt6JaqpzYjkJQT9id60aNwqZjVqlz9Kqp+JcfDjOAqhirNoCI6MelpVPAjZ/CbFv45Y9YNcicqDMKm/Xo/FPJdMlqZ9SIK7qSrrci9mbl6q3/DGQ5f7XuK347rgKeuMgiicEfLPmT0rGY1K5SdI/ryritlMbJrr/PZ8+I8qf9PF8qhMrT39QHfHLkhj/fz/bi+eb83F/VxX1b6jWvt6KdTs/AvvCmqXE235jAAAAAElFTkSuQmCC</Image>
-<Url type="text/html" method="GET" template="https://search.yahoo.com/search" rel="searchform">
-  <Param name="p" value="{searchTerms}"/>
-  <Param name="ei" value="UTF-8"/>
-</Url>
-</SearchPlugin>
deleted file mode 100644
--- a/im/locales/en-US/updater/updater.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-; This Source Code Form is subject to the terms of the Mozilla Public
-; License, v. 2.0. If a copy of the MPL was not distributed with this
-; file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-; This file is in the UTF-8 encoding
-[Strings]
-Title=Software Update
-Info=Instantbird is installing your updates and will start in a few moments…
deleted file mode 100755
--- a/im/locales/filter.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-def test(mod, path, entity = None):
-  import re
-  # ignore anything but Instantbird
-  if mod not in ("netwerk", "dom", "toolkit", "security/manager",
-                 "im", "chat", "purple", "extensions/reporter", "extensions/spellcheck",
-                 "im/branding/release", "im/branding/nightly"):
-    return False
-  if mod == "im" and path.startswith("branding/"):
-    return False
-  if mod != "im" and mod != "extensions/spellcheck":
-    # we only have exceptions for instantbird and extensions/spellcheck
-    return True
-  if not entity:
-    if mod == "extensions/spellcheck":
-      return False
-    # instantbird
-    return not (re.match(r"searchplugins\/.+\.xml", path))
-  if mod == "extensions/spellcheck":
-    # l10n ships en-US dictionary or something, do compare
-    return True
-  if path == "defines.inc":
-    return entity != "MOZ_LANGPACK_CONTRIBUTORS"
-
-  if path == "chrome/instantbird/accountWizard.properties":
-    return not (re.match(r"topProtocol\.[^\.]+\.description", entity))
-
-  if path != "chrome/instantbird/region.properties":
-    # only region.properties exceptions remain, compare all others
-    return True
-
-  return not (re.match(r"browser\.search\.order\.[1-9]", entity))
deleted file mode 100644
--- a/im/locales/generic/install.rdf
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#filter substitution
--->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-  <Description about="urn:mozilla:install-manifest"
-               em:id="@MOZ_LANGPACK_EID@"
-               em:name="@MOZ_LANG_TITLE@ Language Pack"
-               em:version="@MOZ_APP_VERSION@"
-               em:type="8"
-               em:creator="@MOZ_LANGPACK_CREATOR@">
-#ifdef MOZ_LANGPACK_CONTRIBUTORS
-    @MOZ_LANGPACK_CONTRIBUTORS@
-#endif
-    <em:targetApplication>
-      <Description>
-        <em:id>{33cb9019-c295-46dd-be21-8c4936574bee}</em:id>
-        <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
-        <em:maxVersion>@MOZ_APP_VERSION@</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-  </Description>
-</RDF>
deleted file mode 100644
--- a/im/locales/jar.mn
+++ /dev/null
@@ -1,51 +0,0 @@
-#filter substitution
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-@AB_CD@.jar:
-% locale instantbird @AB_CD@ %locale/@AB_CD@/instantbird/
-	locale/@AB_CD@/instantbird/aboutDialog.dtd	(%chrome/instantbird/aboutDialog.dtd)
-	locale/@AB_CD@/instantbird/account.dtd		(%chrome/instantbird/account.dtd)
-	locale/@AB_CD@/instantbird/accounts.properties	(%chrome/instantbird/accounts.properties)
-	locale/@AB_CD@/instantbird/accountWizard.dtd	(%chrome/instantbird/accountWizard.dtd)
-	locale/@AB_CD@/instantbird/accountWizard.properties	(%chrome/instantbird/accountWizard.properties)
-	locale/@AB_CD@/instantbird/addbuddy.dtd		(%chrome/instantbird/addbuddy.dtd)
-	locale/@AB_CD@/instantbird/newtab.properties (%chrome/instantbird/newtab.properties)
-	locale/@AB_CD@/instantbird/newtab.dtd (%chrome/instantbird/newtab.dtd)
-	locale/@AB_CD@/instantbird/conversation.properties	(%chrome/instantbird/conversation.properties)
-	locale/@AB_CD@/instantbird/core.properties	(%chrome/instantbird/core.properties)
-	locale/@AB_CD@/instantbird/credits.dtd		(%chrome/instantbird/credits.dtd)
-	locale/@AB_CD@/instantbird/engineManager.dtd	(%chrome/instantbird/engineManager.dtd)
-	locale/@AB_CD@/instantbird/engineManager.properties (%chrome/instantbird/engineManager.properties)
-	locale/@AB_CD@/instantbird/extensions.properties (%chrome/instantbird/extensions.properties)
-	locale/@AB_CD@/instantbird/extensions-discover.dtd (%chrome/instantbird/extensions-discover.dtd)
-	locale/@AB_CD@/instantbird/instantbird.dtd	(%chrome/instantbird/instantbird.dtd)
-	locale/@AB_CD@/instantbird/instantbird.properties (%chrome/instantbird/instantbird.properties)
-	locale/@AB_CD@/instantbird/joinChat.dtd		(%chrome/instantbird/joinChat.dtd)
-	locale/@AB_CD@/instantbird/mintrayr.dtd		(%chrome/instantbird/mintrayr.dtd)
-	locale/@AB_CD@/instantbird/proxies.dtd		(%chrome/instantbird/proxies.dtd)
-	locale/@AB_CD@/instantbird/proxies.properties	(%chrome/instantbird/proxies.properties)
-	locale/@AB_CD@/instantbird/quitDialog.properties	(%chrome/instantbird/quitDialog.properties)
-	locale/@AB_CD@/instantbird/region.properties	(%chrome/instantbird/region.properties)
-	locale/@AB_CD@/instantbird/tabbrowser.dtd	(%chrome/instantbird/tabbrowser.dtd)
-	locale/@AB_CD@/instantbird/tabbrowser.properties	(%chrome/instantbird/tabbrowser.properties)
-	locale/@AB_CD@/instantbird/updates.properties	(%chrome/instantbird/updates.properties)
-	locale/@AB_CD@/instantbird/preferences/advanced.dtd     (%chrome/instantbird/preferences/advanced.dtd)
-	locale/@AB_CD@/instantbird/preferences/applicationManager.dtd        (%chrome/instantbird/preferences/applicationManager.dtd)
-	locale/@AB_CD@/instantbird/preferences/applicationManager.properties (%chrome/instantbird/preferences/applicationManager.properties)
-	locale/@AB_CD@/instantbird/preferences/applications.dtd (%chrome/instantbird/preferences/applications.dtd)
-	locale/@AB_CD@/instantbird/preferences/colors.dtd       (%chrome/instantbird/preferences/colors.dtd)
-	locale/@AB_CD@/instantbird/preferences/connection.dtd   (%chrome/instantbird/preferences/connection.dtd)
-	locale/@AB_CD@/instantbird/preferences/content.dtd      (%chrome/instantbird/preferences/content.dtd)
-	locale/@AB_CD@/instantbird/preferences/main.dtd         (%chrome/instantbird/preferences/main.dtd)
-	locale/@AB_CD@/instantbird/preferences/preferences.dtd  (%chrome/instantbird/preferences/preferences.dtd)
-	locale/@AB_CD@/instantbird/preferences/preferences.properties (%chrome/instantbird/preferences/preferences.properties)
-	locale/@AB_CD@/instantbird/preferences/privacy.dtd            (%chrome/instantbird/preferences/privacy.dtd)
-	locale/@AB_CD@/instantbird/preferences/tabs.dtd               (%chrome/instantbird/preferences/tabs.dtd)
-	locale/@AB_CD@/instantbird/preferences/themes.dtd             (%chrome/instantbird/preferences/themes.dtd)
-	locale/@AB_CD@/instantbird/preferences/themes.properties      (%chrome/instantbird/preferences/themes.properties)
-% resource search-plugins chrome://instantbird/locale/searchplugins/
-	locale/@AB_CD@/instantbird/searchplugins/list.txt       (.deps/generated_@AB_CD@/list.txt)
-	locale/@AB_CD@/instantbird/searchplugins/               (.deps/generated_@AB_CD@/*.xml)
deleted file mode 100644
--- a/im/locales/l10n.ini
+++ /dev/null
@@ -1,20 +0,0 @@
-; This Source Code Form is subject to the terms of the Mozilla Public
-; License, v. 2.0. If a copy of the MPL was not distributed with this
-; file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-[general]
-depth = ../..
-
-[compare]
-dirs = im
-    chat
-    im/branding/release
-    im/branding/nightly
-
-[includes]
-# non-central apps might want to use %(topsrcdir)s here, or other vars
-# RFE: that needs to be supported by compare-locales, too, though
-toolkit = mozilla/toolkit/locales/l10n.ini
-
-[extras]
-dirs = mozilla/extensions/spellcheck
deleted file mode 100644
--- a/im/locales/moz.build
+++ /dev/null
@@ -1,8 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
-
-DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
deleted file mode 100644
--- a/im/modules/ibCore.jsm
+++ /dev/null
@@ -1,381 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-this.EXPORTED_SYMBOLS = ["Core"];
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/imWindows.jsm");
-ChromeUtils.import("resource:///modules/ibNotifications.jsm");
-ChromeUtils.import("resource:///modules/ibSounds.jsm");
-ChromeUtils.import("resource:///modules/imXPCOMUtils.jsm");
-
-var Core = {
-  _events: [
-    "account-disconnected",
-    "browser-request",
-    "handle-xul-text-link",
-    "quit-application-requested",
-    "quit-application-granted"
-  ],
-
-  get bundle() { return l10nHelper("chrome://instantbird/locale/core.properties"); },
-
-  initLibpurpleOverrides: function() {
-    let forcePurple = Services.prefs.getCharPref("chat.prpls.forcePurple")
-                              .split(",")
-                              .map(aPrplId => aPrplId.trim())
-                              .filter(aPrplId => !!aPrplId);
-    if (!forcePurple.length)
-      return;
-
-    let catMan =
-      Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager);
-    for (let prplId of forcePurple) {
-      catMan.addCategoryEntry("im-protocol-plugin", prplId,
-                              "@instantbird.org/purple/protocol;1",
-                              false, true);
-    }
-  },
-
-  init: function() {
-    try {
-      // Set the Vendor for breakpad only
-      if ("nsICrashReporter" in Ci) {
-        Cc["@mozilla.org/xre/app-info;1"]
-          .getService(Ci.nsICrashReporter)
-          .annotateCrashReport("Vendor", "Instantbird");
-      }
-    } catch(e) {
-      // This can fail if breakpad isn't enabled,
-      // don't worry too much about this exception.
-    }
-
-    if (!Ci.imICoreService) {
-      this._promptError("startupFailure.purplexpcomFileError");
-      return false;
-    }
-
-    if (!Cc["@mozilla.org/chat/core-service;1"]) {
-      this._promptError("startupFailure.xpcomRegistrationError");
-      return false;
-    }
-
-    // Trigger asynchronous initialization of the password service.
-    Services.logins.initializationPromise.catch(() => {
-      this._promptError("startupFailure.passwordServiceError");
-    });
-
-    this.initLibpurpleOverrides();
-
-    try {
-      Services.core.init();
-    }
-    catch (e) {
-      this._promptError("startupFailure.purplexpcomInitError", e);
-      return false;
-    }
-
-    Conversations.init();
-    Notifications.init();
-    Sounds.init();
-#ifdef XP_WIN
-    // For windows seven, initialize the jump list module.
-    const WINTASKBAR_CONTRACTID = "@mozilla.org/windows-taskbar;1";
-    if (WINTASKBAR_CONTRACTID in Cc &&
-        Cc[WINTASKBAR_CONTRACTID].getService(Ci.nsIWinTaskbar).available) {
-      let temp = {};
-      ChromeUtils.import("resource:///modules/ibWinJumpList.jsm", temp);
-      temp.WinJumpList.init();
-    }
-#endif
-
-    this._events.forEach(function (aTopic) {
-      Services.obs.addObserver(Core, aTopic);
-    });
-
-    let self = this;
-    Services.cmd.registerCommand({
-      name: "about",
-      get helpString() { return self.bundle("aboutCommand.help"); },
-      usageContext: Ci.imICommand.CMD_CONTEXT_ALL,
-      priority: Ci.imICommand.CMD_PRIORITY_DEFAULT,
-      run: function (aMsg, aConv) {
-        let page = aMsg.replace(/^about:/, "");
-        let url = "about:" + page;
-        // If the page doesn't exist, we avoid opening a tab.
-        try {
-          Services.io.newChannelFromURI(Services.io.newURI(url));
-        } catch(e) {
-          if (e.result == Cr.NS_ERROR_MALFORMED_URI) {
-            Services.conversations.getUIConversation(aConv).systemMessage(
-              self.bundle("aboutCommand.invalidPageMessage", page));
-            return true;
-          }
-          Cu.reportError(e); // Log unexpected errors.
-          return false;
-        }
-        self.showTab("aboutPanel", aPanel => aPanel.showAboutPage(page));
-        return true;
-      }
-    });
-
-    Services.cmd.registerCommand({
-      name: "debug",
-      get helpString() { return self.bundle("debugCommand.help"); },
-      usageContext: Ci.imICommand.CMD_CONTEXT_ALL,
-      priority: Ci.imICommand.CMD_PRIORITY_DEFAULT,
-      run: (aMsg, aConv) => {
-        this.showDebugLog(aConv.account.id);
-        return true;
-      }
-    });
-
-    Services.logins.initializationPromise.then(() => {
-      this._showAccountManagerIfNeeded(true);
-    });
-    return true;
-  },
-
-  showDebugLog: function(aAccountId) {
-    this.showTab("debugLogPanel", aPanel => {
-      aPanel.browser.addEventListener("DOMContentLoaded", () => {
-        aPanel.initAccountList(aAccountId);
-        aPanel.showDebugLog();
-      });
-    });
-  },
-
-  showWindow: function(aWindowType, aUrl, aName, aFeatures) {
-    var win = Services.wm.getMostRecentWindow(aWindowType);
-    if (win)
-      win.focus();
-    else
-      win = Services.ww.openWindow(null, aUrl, aName, aFeatures, null);
-    return win;
-  },
-
-  showAccounts: function() {
-    this.showWindow("Messenger:Accounts",
-                    "chrome://instantbird/content/accounts.xul", "Accounts",
-                    "chrome,resizable,centerscreen");
-  },
-  showAddons: function() {
-    this.showWindow("Addons:Manager",
-                    "chrome://instantbird/content/extensions.xul", "Addons",
-                    "chrome,menubar,extrachrome,toolbar,dialog=no,resizable,centerscreen");
-  },
-  showContacts: function() {
-    this.showWindow("Messenger:blist",
-                    "chrome://instantbird/content/blist.xul", "Contacts",
-                    "chrome,dialog=no,all,resizable");
-  },
-  showPreferences: function() {
-    this.showWindow("Messenger:Preferences",
-                    "chrome://instantbird/content/preferences/preferences.xul",
-                    "Preferences",
-                    "chrome,titlebar,toolbar,centerscreen,dialog=no");
-  },
-  showUpdates: function() {
-    // copied from checkForUpdates in mozilla/browser/base/content/utilityOverlay.js
-    var um =
-      Cc["@mozilla.org/updates/update-manager;1"]
-        .getService(Ci.nsIUpdateManager);
-    var prompter =
-      Cc["@mozilla.org/updates/update-prompt;1"]
-        .createInstance(Ci.nsIUpdatePrompt);
-
-    // If there's an update ready to be applied, show the "Update Downloaded"
-    // UI instead and let the user know they have to restart the browser for
-    // the changes to be applied.
-    if (um.activeUpdate && um.activeUpdate.state == "pending")
-      prompter.showUpdateDownloaded(um.activeUpdate);
-    else
-      prompter.checkForUpdates();
-  },
-
-  // Creates a panel from the given binding name, and opens it in a new tab,
-  // creating a new window if necessary. The callback is invoked after adding
-  // the panel, which is passed as a parameter.
-  showTab: function(aPanelName, aCallback) {
-    // Try to get the most recent conversation window. If no such window exists,
-    // win will be null.
-    let win = Services.wm.getMostRecentWindow("Messenger:convs");
-    // Tries to open the panel in the specified window.
-    let showPanel = function(aWindow) {
-      // Return false if the window doesn't exist.
-      if (!aWindow)
-        return false;
-      let panel = aWindow.document.createElementNS(
-        "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-        aPanelName);
-      // Try to add the panel, and return false if the window couldn't accept
-      // it (e.g. tabbed conversations are disabled).
-      if (!aWindow.getTabBrowser().addPanel(panel))
-        return false;
-      aWindow.getTabBrowser().selectPanel(panel);
-      panel.ownerDocument.defaultView.focus();
-      aCallback(panel);
-      return true;
-    }
-    // Try to show the debug logs in win, and open a new window if it didn't work.
-    if (showPanel(win))
-      return;
-    win = Services.ww.openWindow(null, "chrome://instantbird/content/instantbird.xul",
-                                 "_blank", "chrome,toolbar,resizable", null);
-    win.addEventListener("load", showPanel.bind(null, win));
-  },
-
-  getIter: function*(aEnumerator) {
-    while (aEnumerator.hasMoreElements())
-      yield aEnumerator.getNext();
-  },
-  getAccounts: function() { return this.getIter(Services.accounts.getAccounts()); },
-
-  /* This function pops up the account manager if no account is
-   * connected or connecting.
-   * When called during startup (aIsStarting == true), it will also
-   * look for crashed accounts.
-   */
-  _showAccountManagerIfNeeded: function (aIsStarting) {
-    // If the current status is offline, we don't need the account manager
-    let isOffline =
-      Services.core.globalUserStatus.statusType == Ci.imIStatusInfo.STATUS_OFFLINE;
-    if (isOffline && !aIsStarting)
-      return;
-
-    let hasActiveAccount = false;
-    let hasCrashedAccount = false;
-    for (let acc in this.getAccounts()) {
-      if (acc.connected || acc.connecting)
-        hasActiveAccount = true;
-
-      // We only check for crashed accounts on startup.
-      if (aIsStarting && acc.autoLogin &&
-          acc.firstConnectionState == acc.FIRST_CONNECTION_CRASHED)
-        hasCrashedAccount = true;
-    }
-
-    /* We only display the account manager on startup if an account has crashed
-       or if all accounts are disconnected
-       In case of connection failure after an automatic reconnection attempt,
-       we don't want to popup the account manager */
-    if ((!hasActiveAccount && !isOffline) || (aIsStarting && hasCrashedAccount))
-      this.showAccounts();
-  },
-
-  _pendingShowAccountManager: null,
-  observe: function(aSubject, aTopic, aData) {
-    if (aTopic == "account-disconnected") {
-      if (this._pendingShowAccountManager)
-        return;
-      let account = aSubject.QueryInterface(Ci.imIAccount);
-      if (account.reconnectAttempt)
-        return;
-      // Automatic reconnections (e.g. if the computer just woke up from
-      // sleep) might not have been triggered yet, wait 300ms for these
-      // before attempting to show the account manager.
-      this._pendingShowAccountManager = setTimeout(() => {
-        this._showAccountManagerIfNeeded(false);
-        delete this._pendingShowAccountManager;
-      }, 300);
-      return;
-    }
-
-    if (aTopic == "browser-request") {
-      Services.ww.openWindow(null,
-                             "chrome://chat/content/browserRequest.xul",
-                             null, "chrome", aSubject);
-      return;
-    }
-
-    if (aTopic == "handle-xul-text-link") {
-      Cc["@mozilla.org/uriloader/external-protocol-service;1"]
-        .getService(Ci.nsIExternalProtocolService)
-        .loadURI(Services.io.newURI(aData));
-      aSubject.QueryInterface(Ci.nsISupportsPRBool).data = true;
-      return;
-    }
-
-    if (aTopic == "quit-application-requested") {
-      this._onQuitRequest(aSubject, aData);
-      return;
-    }
-
-    if (aTopic == "quit-application-granted") {
-      // Don't try to pop up the account manager during shutdown
-      // when the accounts disconnect (it would fail anyway).
-      clearTimeout(this._pendingShowAccountManager);
-      this._pendingShowAccountManager = true;
-      return;
-    }
-  },
-
-  _onQuitRequest: function (aCancelQuit, aQuitType) {
-    // The request has already been canceled somewhere else
-    if ((aCancelQuit instanceof Ci.nsISupportsPRBool)
-         && aCancelQuit.data)
-      return;
-
-    if (!Services.prefs.getBoolPref("messenger.warnOnQuit"))
-      return;
-
-    let unreadConvsCount =
-      Services.conversations.getUIConversations()
-              .filter(c => c.unreadTargetedMessageCount)
-              .length;
-    if (unreadConvsCount == 0)
-      return;
-
-    let bundle =
-      Services.strings.createBundle("chrome://instantbird/locale/quitDialog.properties");
-    let promptTitle    = bundle.GetStringFromName("dialogTitle");
-    let promptMessage  = bundle.GetStringFromName("message");
-    let promptCheckbox = bundle.GetStringFromName("checkbox");
-    let action         = aQuitType == "restart" ? "restart" : "quit";
-    let button         = bundle.GetStringFromName(action + "Button");
-
-    ChromeUtils.import("resource://gre/modules/PluralForm.jsm");
-    promptMessage = PluralForm.get(unreadConvsCount, promptMessage)
-                              .replace("#1", unreadConvsCount);
-
-    let prompts = Services.prompt;
-    let flags = prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_0 +
-                prompts.BUTTON_TITLE_CANCEL * prompts.BUTTON_POS_1 +
-                prompts.BUTTON_POS_1_DEFAULT;
-    let checkbox = {value: false};
-    let parentWindow = Services.wm.getMostRecentWindow("Messenger:convs") ||
-                       Services.wm.getMostRecentWindow("Messenger:blist");
-    if (parentWindow)
-      parentWindow.focus();
-    if (prompts.confirmEx(parentWindow, promptTitle, promptMessage, flags,
-                          button, null, null, promptCheckbox, checkbox)) {
-      aCancelQuit.data = true;
-      return;
-    }
-
-    if (checkbox.value)
-      Services.prefs.setBoolPref("messenger.warnOnQuit", false);
-  },
-
-  _promptError: function(aKeyString, aMessage) {
-    var bundle = this.bundle;
-
-    var title = bundle("startupFailure.title");
-    var message = bundle("startupFailure.apologize") + "\n\n" +
-      (aMessage ? bundle(aKeyString, aMessage)
-                : bundle(aKeyString) + "\n\n" + bundle("startupFailure.update"));
-    const nsIPromptService = Ci.nsIPromptService;
-    const flags =
-      nsIPromptService.BUTTON_POS_1 * nsIPromptService.BUTTON_TITLE_IS_STRING +
-      nsIPromptService.BUTTON_POS_0 * nsIPromptService.BUTTON_TITLE_IS_STRING;
-
-    var prompts = Services.prompt;
-    if (!prompts.confirmEx(null, title, message, flags,
-                           bundle("startupFailure.buttonUpdate"),
-                           bundle("startupFailure.buttonClose"),
-                           null, null, {}))
-      this.showUpdates();
-  }
-};
deleted file mode 100644
--- a/im/modules/ibInterruptions.jsm
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-this.EXPORTED_SYMBOLS = ["Interruptions"];
-
-var Interruptions = {
-  _listeners: [],
-  addListener: function(aListener) {
-    if (!this._listeners.includes(aListener))
-      this._listeners.push(aListener);
-  },
-  removeListener: function(aListener) {
-    this._listeners = this._listeners.filter(o => o !== aListener);
-  },
-
-  /* All code about to perform an action that could interrupt the
-   * user's train of thoughts should call this method.
-   *
-   * aReason should be the notification that justifies the interruption.
-   *         (eg. "new-ui-conversation", "contact-signed-on", ...)
-   * aSubject should be the related object that listeners can analyse.
-   *         (eg. imIConversation, imIContact, ...)
-   * aType Is the action that can be prevented by denying the request.
-   *       (eg. "sound", "notification", "show-conversation")
-   *
-   * Returns true if the request is granted, false otherwise.
-   */
-  requestInterrupt: function(aReason, aSubject, aType) {
-    return this._listeners.every(l => l(aReason, aSubject, aType));
-  }
-};
deleted file mode 100644
--- a/im/modules/ibNotifications.jsm
+++ /dev/null
@@ -1,91 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-this.EXPORTED_SYMBOLS = ["Notifications"];
-
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/imWindows.jsm");
-ChromeUtils.import("resource:///modules/hiddenWindow.jsm");
-ChromeUtils.import("resource:///modules/ibInterruptions.jsm");
-
-var Notifications = {
-  get ellipsis () {
-    let ellipsis = "[\u2026]";
-
-    try {
-      ellipsis =
-        Services.prefs.getComplexValue("intl.ellipsis",
-                                       Ci.nsIPrefLocalizedString).data;
-    } catch (e) { }
-    return ellipsis;
-  },
-
-  _showMessageNotification: function (aMessage) {
-    // Put the message content into a div node of the hidden HTML window.
-    let doc = getHiddenHTMLWindow().document;
-    let xhtmlElement = doc.createElementNS("http://www.w3.org/1999/xhtml", "div");
-    xhtmlElement.innerHTML = aMessage.displayMessage.replace(/<br>/gi, "<br/>");
-
-    // Convert the div node content to plain text.
-    let encoder =
-      Cc["@mozilla.org/layout/documentEncoder;1?type=text/plain"]
-        .createInstance(Ci.nsIDocumentEncoder);
-    encoder.init(doc, "text/plain", 0);
-    encoder.setNode(xhtmlElement);
-    let messageText = encoder.encodeToString().replace(/\s+/g, " ");
-
-    // Crop the end of the text if needed.
-    if (messageText.length > 50)
-      messageText = messageText.substr(0, 50) + this.ellipsis;
-
-    // Use the buddy icon if available for the icon of the notification.
-    let icon;
-    let conv = aMessage.conversation;
-    if (!conv.isChat) {
-      let buddy = conv.buddy;
-      if (buddy)
-        icon = buddy.buddyIconFilename;
-    }
-    if (!icon)
-      icon = "chrome://instantbird/skin/newMessage.png";
-
-    // Prepare an observer to focus the conversation if the
-    // notification is clicked.
-    let observer = {
-      observe: function(aSubject, aTopic, aData) {
-        if (aTopic == "alertclickcallback")
-          Conversations.focusConversation(aMessage.conversation);
-      }
-    };
-
-    // Handle third person messages
-    let name = aMessage.alias || aMessage.who;
-    if (messageText.startsWith("/me "))
-      messageText = messageText.replace(/^\/me/, name);
-
-    // Finally show the notification!
-    Cc["@mozilla.org/alerts-service;1"]
-      .getService(Ci.nsIAlertsService)
-      .showAlertNotification(icon, name, messageText, true, "", observer);
-  },
-
-  init: function() {
-    Services.obs.addObserver(Notifications, "new-text");
-  },
-
-  _notificationPrefName: "messenger.options.notifyOfNewMessages",
-  observe: function(aSubject, aTopic, aData) {
-    if (aTopic != "new-text")
-      return;
-
-    if (!aSubject.incoming || aSubject.system ||
-        (aSubject.conversation.isChat && !aSubject.containsNick))
-      return;
-
-    if (!Conversations.isConversationWindowFocused() &&
-        Services.prefs.getBoolPref(this._notificationPrefName) &&
-        Interruptions.requestInterrupt(aTopic, aSubject, "notification"))
-      this._showMessageNotification(aSubject);
-  }
-};
deleted file mode 100644
--- a/im/modules/ibSounds.jsm
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-this.EXPORTED_SYMBOLS = ["Sounds"];
-
-ChromeUtils.import("resource:///modules/hiddenWindow.jsm");
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/ibInterruptions.jsm");
-
-var Sounds = {
-  soundEvents: ["contact-signed-on", "contact-signed-off", "new-text"],
-  soundFiles: {
-    incoming: "chrome://instantbird-sounds/skin/receive.wav",
-    outgoing: "chrome://instantbird-sounds/skin/send.wav",
-    login: "chrome://instantbird-sounds/skin/login.wav",
-    logout: "chrome://instantbird-sounds/skin/logout.wav",
-    alert: "chrome://instantbird-sounds/skin/alert.wav"
-  },
-
-  getBoolPref: aPrefName =>
-    Services.prefs.getBoolPref("messenger.options.playSounds." + aPrefName),
-
-  play: function sh_play(aEvent, aPref, aSubject, aTopic) {
-    if (!this.getBoolPref(aPref) || !this.getBoolPref(aEvent) ||
-        !Interruptions.requestInterrupt(aTopic, aSubject, "sound"))
-      return;
-
-    new (getHiddenHTMLWindow().Audio)(this.soundFiles[aEvent])
-                              .setAttribute("autoplay", "true");
-  },
-
-  observe: function(aObject, aTopic, aMsg) {
-    switch(aTopic) {
-    case "contact-signed-on":
-      this.play("login", "blist", aObject, aTopic);
-      break;
-
-    case "contact-signed-off":
-      this.play("logout", "blist", aObject, aTopic);
-      break;
-
-    case "new-text":
-      if (aObject.outgoing)
-        this.play("outgoing", "message", aObject, aTopic);
-      else if (aObject.incoming && !aObject.system) {
-        if (!aObject.conversation.isChat)
-          this.play("incoming", "message", aObject, aTopic);
-        else if (aObject.containsNick)
-          this.play("alert", "message", aObject, aTopic);
-      }
-      break;
-
-    default:
-      throw "bad notification";
-    }
-  },
-
-  init: function() {
-    for (let topic of this.soundEvents)
-      Services.obs.addObserver(this, topic);
-  }
-};
deleted file mode 100644
--- a/im/modules/ibTagMenu.jsm
+++ /dev/null
@@ -1,120 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-this.EXPORTED_SYMBOLS = ["TagMenu"];
-
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/imXPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyGetter(this, "_", () =>
-  l10nHelper("chrome://instantbird/locale/instantbird.properties")
-);
-
-// aOnTag and aOnAddTag will be called with aParent as the this value.
-// If a contact binding is given in aTarget, the menu checkmarks the existing
-// tags on this contact.
-function TagMenu(aParent, aWindow, aMenuId, aOnTag, aOnAddTag, aTarget = null) {
-  this.parent = aParent;
-  this.document = aWindow.document;
-  this.target = aTarget;
-  this.onAddTag = aOnAddTag;
-  this.onTag = aOnTag;
-
-  // Set up the tag menu at the menu element specified by aMenuId.
-  let document = this.document;
-  let menu = document.getElementById(aMenuId);
-  let popup = menu.firstChild;
-  if (popup)
-    popup.remove();
-  popup = document.createElement("menupopup");
-  this.popup = popup;
-  popup.addEventListener("command", this);
-  popup.addEventListener("popupshowing", this);
-  popup.addEventListener("popuphiding", this);
-  popup.appendChild(document.createElement("menuseparator"));
-  let addTagItem = document.createElement("menuitem");
-  addTagItem.setAttribute("label" , _("addNewTagCmd.label"));
-  addTagItem.setAttribute("accesskey", _("addNewTagCmd.accesskey"));
-  addTagItem.addEventListener("command", this);
-  addTagItem.isAddTagItem = true;
-  popup.appendChild(addTagItem);
-  menu.appendChild(popup);
-}
-TagMenu.prototype = {
-  handleEvent: function(aEvent) {
-    // Don't let events bubble as the tag menu may be a submenu of a context
-    // menu with its own popupshowing handler, and as the command event
-    // on the addTagItem would otherwise bubble to the popup and be handled
-    // again.
-    aEvent.stopPropagation();
-    switch (aEvent.type) {
-      case "command":
-        if (aEvent.target.isAddTagItem)
-          return this.addNewTag(aEvent);
-        return this.tag(aEvent);
-      case "popupshowing":
-        return this.tagsPopupShowing(aEvent);
-      case "popuphiding":
-        return true;
-    }
-    return true;
-  },
-  tagsPopupShowing: function(aEvent) {
-    let item;
-    while ((item = this.popup.firstChild) && item.localName != "menuseparator")
-      item.remove();
-
-    if (this.target) {
-      var tags = this.target.contact.getTags();
-      var groupId = this.target.group.groupId;
-    }
-
-    let allTags = Services.tags.getTags().reverse();
-    for (let tag of allTags) {
-      item = this.document.createElement("menuitem");
-      item.setAttribute("label", tag.name);
-      let id = tag.id;
-      item.groupId = id;
-      if (this.target) {
-        item.setAttribute("type", "checkbox");
-        if (tags.some(t => t.id == id)) {
-          item.setAttribute("checked", "true");
-          if (tags.length == 1)
-            item.setAttribute("disabled", "true"); // can't remove the last tag.
-        }
-      }
-      this.popup.insertBefore(item, this.popup.firstChild);
-    }
-    return true;
-  },
-  tag: function(aEvent) {
-    let id = aEvent.originalTarget.groupId;
-    if (!id)
-      return false;
-
-    try {
-      return this.onTag.call(this.parent, Services.tags.getTagById(id));
-    } catch(e) {
-      Cu.reportError(e);
-      return false;
-    }
-  },
-  addNewTag: function(aEvent) {
-    let name = {};
-    if (!Services.prompt.prompt(this.document.defaultView,
-                                _("newTagPromptTitle"),
-                                _("newTagPromptMessage"), name, null,
-                                {value: false}) || !name.value)
-      return false; // the user canceled
-
-    try {
-      // If the tag already exists, createTag will return it.
-      return this.onAddTag.call(this.parent,
-                                Services.tags.createTag(name.value));
-    } catch(e) {
-      Cu.reportError(e);
-      return false;
-    }
-  }
-};
deleted file mode 100644
--- a/im/modules/ibWinJumpList.jsm
+++ /dev/null
@@ -1,146 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-this.EXPORTED_SYMBOLS = ["WinJumpList"];
-
-var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/imStatusUtils.jsm");
-
-var WinJumpList = {
-  winJumpListBuilder: null,
-
-  /*
-    Jumplist entries can be of the following 'type' (required attribute):
-      type: "shortcut"        // nsIJumpListShortcut
-        label: <string>,      //  label shown in the jumplist
-        description: <string> //  longer description, shown in a tooltip
-        parameter: <string>   //  commandline parameter for this action
-        iconIndex: <int>      //  number of icon resource in executable
-        id: <string>          //  Only used to identify a certain element
-                              //   if an extension wants to insert an
-                              //   item at a specific position
-     or
-      type: "separator"       // nsIJumpListSeparator, no way to customize this
-        id: <string>          //  see description of shortcut id
-  */
-  // Default jumplist entries for changing the status.
-  jumplistEntries: [
-    { type: "shortcut",
-      id: "status_available",
-      get label() { return Status.toLabel("available"); },
-      description: null,
-      parameter: "-status available",
-      iconIndex: 1
-    },
-    { type: "shortcut",
-      id: "status_unavailable",
-      get label() { return Status.toLabel("unavailable"); },
-      description: null,
-      parameter: "-status unavailable",
-      iconIndex: 2
-    },
-    { type: "shortcut",
-      id: "status_offline",
-      get label() { return Status.toLabel("offline"); },
-      description: null,
-      parameter: "-status offline",
-      iconIndex: 3
-    }
-  ],
-
-  // This is called by the Instantbird core and does not need to be re-called by
-  // any other code working with jump lists.
-  init: function WJL_init() {
-    let builder = Cc["@mozilla.org/windows-taskbar;1"]
-                     .getService(Ci.nsIWinTaskbar).createJumpListBuilder();
-    if (!builder || !builder.available)
-      return;
-
-    this.winJumpListBuilder = builder;
-
-    // Set the jump list using the default jumplistEntries.
-    this.set();
-  },
-
-  set: function WJL_set() {
-    // Return early if winJumpListBuilder doesn't exist.
-    if (!this.winJumpListBuilder)
-      return;
-
-    // Remove the current jump list so it can be replaced.
-    this.reset();
-
-    let items = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
-
-    for (let currentItem of this.jumplistEntries) {
-      let item;
-      if (currentItem.type == "separator")
-        item = this._getSeparatorItem();
-      else if (currentItem.type == "shortcut") {
-        item = this._getHandlerAppItem(currentItem.label,
-                                       currentItem.description,
-                                       currentItem.parameter,
-                                       currentItem.iconIndex);
-      }
-      else
-        throw "Unknown jumplist item type: " + currentItem.type;
-
-      items.appendElement(item);
-    }
-
-    try {
-      // Initialize the array.
-      let items2 = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
-      this.winJumpListBuilder.initListBuild(items2);
-
-      this.winJumpListBuilder.addListToBuild(
-        Ci.nsIJumpListBuilder.JUMPLIST_CATEGORY_TASKS, items);
-    } catch (e) {
-      Cu.reportError(e);
-    }
-
-    // Send the list to Windows
-    this.winJumpListBuilder.commitListBuild(succeed => {
-      if (!succeed) {
-        Cu.reportError("commitListBuild failed");
-      }
-    });
-  },
-
-  reset: function WJL_reset() {
-    // Remove the jump list.
-    if (this.winJumpListBuilder)
-      this.winJumpListBuilder.deleteActiveList();
-  },
-
-  _getSeparatorItem: function WJL__getSeparatorItem() {
-    return Cc["@mozilla.org/windows-jumplistseparator;1"]
-              .createInstance(Ci.nsIJumpListSeparator);
-  },
-
-  _getHandlerAppItem: function WJL__getHandlerAppItem(aName, aDescription,
-                                                      aArgs, aIconIndex) {
-    var file = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
-
-    // XXX where can we grab this from in the build? Do we need to?
-    file.append("instantbird.exe");
-
-    var handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"]
-                        .createInstance(Ci.nsILocalHandlerApp);
-    handlerApp.executable = file;
-    // Handlers default to the leaf name if a name is not specified.
-    if (aName && aName.length != 0)
-      handlerApp.name = aName;
-    handlerApp.detailedDescription = aDescription;
-    handlerApp.appendParameter(aArgs);
-
-    var item = Cc["@mozilla.org/windows-jumplistshortcut;1"]
-                  .createInstance(Ci.nsIJumpListShortcut);
-    item.app = handlerApp;
-    item.iconIndex = aIconIndex;
-    return item;
-  }
-};
deleted file mode 100644
--- a/im/modules/imWindows.jsm
+++ /dev/null
@@ -1,232 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var CONVERSATION_WINDOW_URI = "chrome://instantbird/content/instantbird.xul";
-this.EXPORTED_SYMBOLS = ["Conversations"];
-
-ChromeUtils.import("resource:///modules/imServices.jsm");
-ChromeUtils.import("resource:///modules/ibInterruptions.jsm");
-
-var Conversations = {
-  _unreadCount: 0,
-  get unreadCount() { return this._unreadCount; },
-  set unreadCount(val) {
-    if (val == this._unreadCount)
-      return val;
-    Services.obs.notifyObservers(null, "unread-im-count-changed", val);
-    return (this._unreadCount = val);
-  },
-  _windows: [],
-  registerWindow: function(aWindow) {
-    if (!this._windows.includes(aWindow))
-      this._windows.unshift(aWindow);
-
-    if (this._pendingConversations) {
-      // Cache in a variable and delete the existing notification array
-      // before redispatching the notifications so that the observe
-      // method can recreate it.
-      let notifications = this._pendingConversations;
-      this._pendingConversations = null;
-      for (let conv of notifications)
-        this.showConversation(conv);
-    }
-  },
-  unregisterWindow: function(aWindow) {
-    let index = this._windows.indexOf(aWindow);
-    if (index != -1)
-      this._windows.splice(index, 1);
-  },
-
-  _uiConv: {},
-  _conversations: [],
-  registerConversation: function(aConversation) {
-    if (!this._conversations.includes(aConversation))
-      this._conversations.push(aConversation);
-
-    let uiConv = aConversation.conv;
-    this._uiConv[uiConv.id] = aConversation;
-
-    this.forgetHiddenConversation(uiConv);
-  },
-  unregisterConversation: function(aConversation, aShouldClose) {
-    let index = this._conversations.indexOf(aConversation);
-    if (index != -1)
-      this._conversations.splice(index, 1);
-
-    let uiConv = aConversation.conv;
-    if (this._uiConv[uiConv.id] == aConversation) {
-      delete this._uiConv[uiConv.id];
-      if (aShouldClose === true) {
-        this.forgetHiddenConversation(uiConv);
-        uiConv.close();
-      }
-      else if (aShouldClose === false || !uiConv.checkClose())
-        this.hideConversation(uiConv);
-    }
-  },
-
-  isConversationWindowFocused: function() {
-    return this._windows.length > 0 && this._windows[0].document.hasFocus();
-  },
-  isUIConversationDisplayed: function(aUIConv) { return aUIConv.id in this._uiConv; },
-  focusConversation: function(aConv) {
-    let uiConv = Services.conversations.getUIConversation(aConv);
-    uiConv.target = aConv;
-    if (!this.isUIConversationDisplayed(uiConv))
-      this.showConversation(uiConv);
-    // The conversation may still not be displayed if we are waiting
-    // for a new window. In this case the conversation will be focused
-    // automatically anyway.
-    if (this.isUIConversationDisplayed(uiConv)) {
-      let conv = this._uiConv[uiConv.id];
-      let doc = conv.ownerDocument;
-      doc.getElementById("conversations").selectPanel(conv);
-      doc.defaultView.focus();
-#ifdef XP_MACOSX
-      Cc["@mozilla.org/widget/macdocksupport;1"]
-        .getService(Ci.nsIMacDockSupport)
-        .activateApplication(true);
-#endif
-    }
-    return uiConv;
-  },
-
-  onWindowFocus: function (aWindow) {
-    let position = this._windows.indexOf(aWindow);
-    if (position != -1) {
-      this._windows.splice(position, 1);
-      this._windows.unshift(aWindow);
-    }
-    this.unreadCount = 0;
-  },
-
-  init: function() {
-    let os = Services.obs;
-    ["new-text",
-     "new-ui-conversation"].forEach(function (aTopic) {
-      os.addObserver(this, aTopic);
-    }, this);
-  },
-
-  _pendingConversations: null,
-  observe: function(aSubject, aTopic, aMsg) {
-    if (aTopic == "new-text") {
-      if (aSubject.incoming && !aSubject.system &&
-          (!aSubject.conversation.isChat || aSubject.containsNick)) {
-        if (!this.isConversationWindowFocused())
-          ++this.unreadCount;
-        let uiConv =
-          Services.conversations.getUIConversation(aSubject.conversation);
-        if (!this.isUIConversationDisplayed(uiConv) &&
-            this._requestShowConversation(aTopic, aSubject))
-          this.showConversation(uiConv);
-      }
-      return;
-    }
-
-    if (aTopic != "new-ui-conversation")
-      return;
-
-    if (!this._isConversationHidden(aSubject) &&
-        this._requestShowConversation(aTopic, aSubject))
-      this.showConversation(aSubject);
-    else
-      this.hideConversation(aSubject);
-  },
-
-  _hiddenConversationsPref: "messenger.conversations.hiddenConversations",
-  get _hiddenConversations() {
-    let hiddenConvs = {};
-    try {
-      hiddenConvs =
-        JSON.parse(Services.prefs.getCharPref(this._hiddenConversationsPref));
-    } catch(e) {}
-    delete this._hiddenConversations;
-    return (this._hiddenConversations = hiddenConvs);
-  },
-
-  forgetHiddenConversation: function(aConv) {
-    if (this._isConversationHidden(aConv)) {
-      let accountId = aConv.account.id;
-      delete this._hiddenConversations[accountId][aConv.normalizedName];
-      if (Object.keys(this._hiddenConversations[accountId]).length == 0)
-        delete this._hiddenConversations[accountId];
-      this._saveHiddenConversations();
-    }
-  },
-
-  _saveHiddenConversations: function() {
-    Services.prefs.setCharPref(this._hiddenConversationsPref,
-                               JSON.stringify(this._hiddenConversations));
-  },
-
-  hideConversation: function(aConv) {
-    Services.obs.notifyObservers(aConv, "ui-conversation-hidden");
-    if (!aConv.isChat)
-      return;
-    let accountId = aConv.account.id;
-    if (!(accountId in this._hiddenConversations))
-      this._hiddenConversations[accountId] = {};
-    this._hiddenConversations[accountId][aConv.normalizedName] = true;
-    this._saveHiddenConversations();
-  },
-
-  _isConversationHidden: function(aConv) {
-    let accountId = aConv.account.id;
-    return aConv.isChat && accountId in this._hiddenConversations &&
-           Object.prototype.hasOwnProperty.call(this._hiddenConversations[accountId],
-                                                aConv.normalizedName);
-  },
-
-  _requestShowConversation: (aTopic, aSubject) =>
-    Interruptions.requestInterrupt(aTopic, aSubject, "show-conversation"),
-
-  showConversation: function(aConv) {
-    if (this.isUIConversationDisplayed(aConv) ||
-        (this._pendingConversations &&
-        this._pendingConversations.includes(aConv)))
-      return;
-
-    Services.obs.notifyObservers(aConv, "showing-ui-conversation");
-    // The conversation is not displayed anywhere yet.
-    // First, check if an existing conversation window can accept it.
-    for (let win of this._windows)
-      if (win.document.getElementById("conversations").addConversation(aConv))
-        return;
-
-    // At this point, no existing registered window can accept the conversation.
-    if (this._pendingConversations) {
-      // If we are already creating a window, append the notification.
-      this._pendingConversations.push(aConv);
-    }
-    else {
-      // We need to create a new window.
-      this._pendingConversations = [aConv];
-      Services.ww.openWindow(null, CONVERSATION_WINDOW_URI, "_blank",
-                             "chrome,toolbar,resizable", null);
-    }
-  },
-
-  showNewTab: function() {
-    let win = Services.wm.getMostRecentWindow("Messenger:convs");
-    let addNewTab = function(aWindow) {
-      if (!aWindow)
-        return false;
-      let newtab = aWindow.document.createElementNS(
-        "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-        "newtab");
-      if (!aWindow.getTabBrowser().addPanel(newtab))
-        return false;
-      aWindow.getTabBrowser().selectPanel(newtab);
-      newtab.ownerDocument.defaultView.focus();
-      newtab.init();
-      return true;
-    }
-    if (!addNewTab(win)) {
-      win = Services.ww.openWindow(null, CONVERSATION_WINDOW_URI, "_blank",
-                                   "chrome,toolbar,resizable", null);
-      win.addEventListener("load", addNewTab.bind(null, win));
-    }
-  }
-};
deleted file mode 100644
--- a/im/modules/moz.build
+++ /dev/null
@@ -1,19 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-EXTRA_JS_MODULES += [
-    'ibInterruptions.jsm',
-    'ibNotifications.jsm',
-    'ibSounds.jsm',
-    'ibTagMenu.jsm',
-]
-
-if CONFIG['OS_ARCH'] == 'WINNT':
-    EXTRA_JS_MODULES += ['ibWinJumpList.jsm']
-
-EXTRA_PP_JS_MODULES += [
-    'ibCore.jsm',
-    'imWindows.jsm',
-]
deleted file mode 100644
--- a/im/moz.build
+++ /dev/null
@@ -1,21 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-CONFIGURE_SUBST_FILES += ['installer/Makefile']
-
-DIRS += [
-    'content',
-    'locales',
-    'themes',
-    'modules',
-    'components'
-]
-
-# app is always last as it packages up the built files on mac.
-DIRS += ['app']
-
-if CONFIG['MAKENSISU']:
-    DIRS += ['installer/windows']
-
deleted file mode 100644
--- a/im/moz.configure
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-imply_option('MOZ_PLACES', True)
-
-
-@depends(application)
-def is_comm(app):
-    return app[0].startswith('comm/')
-
-
-@depends(is_comm)
-def toolkit_configure(is_comm):
-    if is_comm:
-        return '../../toolkit/moz.configure'
-    else:
-        return '../mozilla/toolkit/moz.configure'
-
-include(toolkit_configure)
deleted file mode 100644
--- a/im/test/xpcshell.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[include:chat/modules/test/xpcshell.ini]
-[include:chat/components/src/test/xpcshell.ini]
-[include:chat/protocols/irc/test/xpcshell.ini]
-[include:chat/protocols/skype/test/xpcshell.ini]
-[include:chat/protocols/xmpp/test/xpcshell.ini]
-#[include:extensions/purple/purplexpcom/src/test/xpcshell.ini]
deleted file mode 100644
--- a/im/themes/accountWizard.css
+++ /dev/null
@@ -1,112 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-%ifdef XP_WIN
-@namespace html url("http://www.w3.org/1999/xhtml");
-%endif
-
-#accountprotocol,
-#accountsummary {
-  overflow: visible;
-}
-
-#summarygrid {
-  overflow: auto;
-}
-
-#otherListItem {
-  padding-left: 40px;
-  min-height: 40px;
-  -moz-box-orient: vertical;
-  -moz-box-pack: center;
-}
-
-.top-proto-name, .top-proto-description {
-  margin: 2px 2px;
-  padding: 0px;
-}
-
-.top-proto-name {
-  font-size: larger;
-}
-
-.top-proto-description {
-  font-size: smaller;
-  opacity: 0.85;
-}
-
-.top-proto-icon {
-  padding: 4px;
-}
-
-groupbox.collapsable {
-  -moz-user-focus: normal;
-}
-
-%ifdef XP_WIN
-groupbox.collapsable .caption-text {
-  border: 1px solid transparent;
-}
-
-groupbox.collapsable:focus .caption-text {
-  border: 1px dotted ThreeDDarkShadow;
-}
-%endif
-
-groupbox.collapsable[closed="true"] {
-  border: none;
-  -moz-appearance: none;
-}
-
-groupbox[closed="true"] > .groupbox-body {
-  display: none;
-}
-
-%ifdef XP_MACOSX
-groupbox.collapsable caption .caption-icon {
-  width: 11px;
-  height: 11px;
-  background-repeat: no-repeat;
-  background-position: center;
-  margin-inline-end: 2px;
-  background-image: url("chrome://global/skin/arrow/arrow-dn.gif");
-}
-
-groupbox.collapsable[closed="true"] caption .caption-icon {
-  background-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-%else
-groupbox.collapsable caption .caption-icon {
-  width: 9px;
-  height: 9px;
-  background-repeat: no-repeat;
-  background-position: center;
-  margin-inline-start: 1px;
-  margin-inline-end: 3px;
-%ifdef XP_WIN
-  background-image: url("chrome://global/skin/tree/twisty.svg#open");
-%else
-  background-image: url("chrome://global/skin/tree/twisty-open.png");
-%endif
-}
-
-
-groupbox.collapsable[closed="true"] caption .caption-icon {
-%ifdef XP_WIN
-  background-image: url("chrome://global/skin/tree/twisty.svg#clsd");
-%else
-  background-image: url("chrome://global/skin/tree/twisty-clsd.png");
-%endif
-}
-%endif
-
-#value-column {
-  min-width: 15em;
-}
-
-%ifdef XP_WIN
-textbox html|*.textbox-input:placeholder {
-  font-style: normal;
-}
-%endif
deleted file mode 100644
--- a/im/themes/accounts-aero.css
+++ /dev/null
@@ -1,47 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include accounts.css
-
-/* This applies only if Glass is available. */
-@media all and (-moz-windows-compositor) {
-  #accountManager {
-    -moz-appearance: -moz-win-borderless-glass;
-    background-color: transparent;
-  }
-}
-
-/* Our fallback for Aero Basic: set the background color appropriately. */
-@media not all and (-moz-windows-compositor) {
-  #accountManager:-moz-system-metric(windows-default-theme) {
-    background-color: rgb(185, 209, 234);
-  }
-  #accountManager:-moz-system-metric(windows-default-theme):-moz-window-inactive {
-    background-color: rgb(215, 228, 242);
-  }
-}
-
-/* This should apply to both full Aero and Aero Basic as well. */
-@media all and (-moz-windows-theme: aero) {
-  #bottombuttons {
-    background-color: rgba(255, 255, 255, 0.8);
-    border: 1px solid rgba(0, 0, 0, 0.25);
-    border-radius: 0 0 5px 5px;
-  }
-
-  #accountsDesk > * {
-    border-radius: 5px 5px 0 0;
-    border-top: 1px solid rgba(0, 0, 0, 0.25);
-    border-left: 1px solid rgba(0, 0, 0, 0.25);
-    border-right: 1px solid rgba(0, 0, 0, 0.25);
-  }
-
-  #accountsNotificationBox {
-    background-color: rgba(255, 255, 255, 0.8);
-  }
-
-  #accountlist {
-    border-bottom: none;
-  }
-}
deleted file mode 100644
--- a/im/themes/accounts.css
+++ /dev/null
@@ -1,217 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* large parts copied from the addon manager */
-
-#accountManager {
-  background-color: ThreeDFace;
-  padding: 0 0;
-  margin: 0 0;
-}
-
-%ifndef XP_MACOSX
-notification > hbox {
-  border: none !important;
-  border-bottom: 1px solid ThreeDShadow !important;
-}
-%endif
-
-#accountsNotificationBox {
-  margin: 0 0;
-  -moz-appearance: none;
-}
-
-#noAccountScreen {
-  color: -moz-FieldText;
-  background-color: -moz-Field;
-  overflow: auto;
-}
-#noAccountBox {
-  background: url("chrome://global/skin/icons/info.svg") left 5px no-repeat;
-  background-size: 2.5em;
-  padding-right: 3.5em;
-  padding-left: 3.5em;
-  margin-inline-start: 2.5em;
-  margin-inline-end: 1.5em;
-}
-#noAccountInnerBox {
-  opacity: .8;
-}
-#noAccountTitle {
-  font-size: 2em;
-  font-weight: lighter;
-  line-height: 1.2;
-  margin: 0;
-  margin-bottom: .3em;
-  padding-bottom: .2em;
-  border-bottom: 1px solid -moz-FieldText;
-}
-#noAccountDesc {
-  font-size: 110%;
-  margin-right: 0;
-  margin-left: 0;
-}
-
-#accountlist {
-  margin: 0 0;
-  -moz-appearance: none;
-%ifndef XP_MACOSX
-  border-bottom: 2px solid;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-%endif
-}
-
-#bottombuttons {
-%ifdef XP_MACOSX
-  -moz-box-pack: end;
-  padding-inline-start: 2px;
-  padding-inline-end: 11px;
-  -moz-appearance: statusbar;
-  min-height: 28px;
-%else
-  margin: 0 0;
-%endif
-}
-
-%ifdef XP_MACOSX
-
-%filter substitution
-%define loweredShadow 0 1px rgba(255, 255, 255, .4)
-
-%define roundButtonShadow 0 1px rgba(255, 255, 255, .4)
-%define roundButtonPressedShadow inset 0 1px 3px rgba(0, 0, 0, .2), 0 1px rgba(255, 255, 255, .4)
-
-%define toolbarbuttonBorderColor rgba(59, 59, 59, 0.9)
-%define toolbarbuttonCornerRadius 3px
-%define toolbarbuttonBackground -moz-linear-gradient(top, #FFF, #ADADAD) repeat-x
-%define toolbarbuttonPressedInnerShadow inset rgba(0, 0, 0, 0.3) 0 -6px 10px, inset #000 0 1px 3px, inset rgba(0, 0, 0, 0.2) 0 1px 3px
-%define toolbarbuttonPressedBackgroundColor #B5B5B5
-%define toolbarbuttonInactiveBorderColor rgba(146, 146, 146, 0.84)
-%define toolbarbuttonInactiveFontColor #7C7C7C
-%define toolbarbuttonInactiveBackgroundImage -moz-linear-gradient(top, #FFF, #CCC)
-
-button {
-  -moz-appearance: none;
-  min-height: 18px;
-  min-width: 0;
-  margin: 0 3px;
-  padding: 0 2px;
-  text-shadow: @loweredShadow@;
-  border: 1px solid @toolbarbuttonBorderColor@;
-  border-radius: @toolbarbuttonCornerRadius@;
-  box-shadow: @loweredShadow@;
-  background: @toolbarbuttonBackground@;
-  background-origin: border-box;
-}
-
-button:focus {
-  box-shadow: var(--focus-ring-box-shadow), @roundButtonShadow@;
-}
-
-button:active:hover:focus {
-  box-shadow: var(--focus-ring-box-shadow), @roundButtonPressedShadow@;
-}
-
-button:hover:active:not([disabled="true"]) {
-  background: @toolbarbuttonPressedBackgroundColor@;
-  text-shadow: @loweredShadow@;
-  box-shadow: @toolbarbuttonPressedInnerShadow@, @loweredShadow@;
-}
-
-#bottombuttons button:-moz-window-inactive {
-  color: @toolbarbuttonInactiveFontColor@ !important; /* remove this when we support click-through, bug 392188 */
-  border-color: @toolbarbuttonInactiveBorderColor@;
-  background-image: @toolbarbuttonInactiveBackgroundImage@;
-  opacity: 0.7;
-}
-%else
-%ifndef XP_WIN
-#newaccount {
-  margin-left: 0;
-}
-
-#close {
-  margin-right: 0;
-}
-%else
-#newaccount,
-#close {
-  margin: 3px;
-}
-%endif
-%endif
-
-/* List Items */
-richlistitem[state="disconnected"] .accountIcon {
-  opacity: 0.3;
-}
-richlistitem[state="connecting"] .accountIcon,
-richlistitem[state="disconnected"][selected="true"] .accountIcon {
-  opacity: 0.7;
-}
-richlistitem[state="disconnected"]:not([selected="true"]) {
-  color: GrayText;
-}
-
-richlistitem[error="true"] .accountName {
-  color: rgb(150, 0, 0);
-}
-
-%ifndef XP_MACOSX
-/* When the error message was too long, the buttons were too small */
-richlistitem .account-buttons button {
-  min-height: 2em;
-}
-%endif
-
-richlistitem .account-buttons {
-  margin-top: 2px;
-%ifdef XP_MACOSX
-  margin-left: 35px;
-%else
-  margin-left: 32px;
-%endif
-}
-
-richlistitem[dragover="down"] {
-  border-bottom: 3px solid HighLight;
-}
-richlistitem[dragover="up"] {
-  border-top: 3px solid HighLight;
-}
-
-.error {
-  color: rgb(200, 0, 0);
-  margin-left: 6px;
-}
-.accountName {
-  font-weight: bold;
-}
-
-.accountIcon {
-  width: 32px;
-  max-width: 32px;
-  height: 32px;
-  max-height: 32px;
-}
-
-.accountStateIcon {
-  margin-inline-start: 16px;
-  margin-top: 16px;
-  width: 16px;
-  height: 16px;
-}
-
-richlistitem[state="connected"] .accountStateIcon {
-  list-style-image: url("chrome://chat/skin/available-16.png");
-}
-richlistitem[state="disconnected"] .accountStateIcon {
-  list-style-image: url("chrome://chat/skin/offline-16.png");
-}
-richlistitem[state="connecting"] .accountStateIcon {
-  list-style-image: url("chrome://global/skin/icons/loading.png");
-}
-richlistitem[error="true"] .accountStateIcon {
-  list-style-image: url("chrome://global/skin/icons/warning-16.png");
-}
deleted file mode 100644
index 433c25e1a39d85ef3c4545b7e0f6dd0c6baab724..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ab78613132887820625051be89da9a706e4b0cfe..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f53fdda5733fa693ddfc6073c8092afc8edb5505..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ced958ebbe39646e15fef004e6c1a5bb3f2f21f5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/alert.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.alertText[clickable="true"] {
-  color: -moz-initial;
-  text-decoration: none;
-}
deleted file mode 100644
--- a/im/themes/blist-aero.css
+++ /dev/null
@@ -1,72 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include blist.css
-
-/* This applies only if Glass is available. */
-@media all and (-moz-windows-compositor) {
-  #blistWindow {
-    -moz-appearance: -moz-win-borderless-glass;
-    background: transparent;
-  }
-
-  #blistMenubar > menu:-moz-window-inactive,
-  #displayName[usingDefault]:not([editing]) {
-    color: GrayText;
-    text-shadow: 0 0 1px Menu,
-                 0 0 1px Menu,
-                 0 0 2px Menu,
-                 0 0 5px Menu;
-  }
-}
-
-/* Our fallback for Aero Basic: set the background color appropriately. */
-@media not all and (-moz-windows-compositor) {
-  #blistWindow:-moz-system-metric(windows-default-theme) {
-    background-color: rgb(185, 209, 234);
-  }
-  #blistWindow:-moz-system-metric(windows-default-theme):-moz-window-inactive {
-    background-color: rgb(215, 228, 242);
-  }
-}
-
-/* Used by both Aero themes */
-@media all and (-moz-windows-theme: aero) {
-  #status {
-    -moz-appearance: none;
-    background: transparent;
-    border: none;
-  }
-
-  /* This thing has a border we need to remove. */
-  #mainToolbox {
-    -moz-appearance: none;
-    background-color: rgba(255, 255, 255, 0.8);
-    border-radius: 5px 5px 0 0;
-    border: 1px solid rgba(0, 0, 0, 0.25);
-  }
-
-  #statusArea {
-    -moz-appearance: none;
-    margin-left: 1px;
-    margin-right: 1px;
-    border: none;
-  }
-
-  #buddyListMsg {
-    border-left: 1px solid rgba(0, 0, 0, 0.25);
-    border-right: 1px solid rgba(0, 0, 0, 0.25);
-    background-color: rgba(255, 255, 255, 0.8);
-  }
-
-  .listboxHeader {
-    background-color: transparent;
-    background-image: -moz-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05));
-    border: none;
-  }
-
-  #contactsHeader {
-    border-top: 1px solid rgba(0, 0, 0, 0.12);
-  }
-}
deleted file mode 100644
--- a/im/themes/blist.css
+++ /dev/null
@@ -1,644 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-@import url("chrome://chat/skin/status.css");
-
-#buddyListMsg {
-  overflow-y: auto;
-  background-color: -moz-Field;
-}
-
-#listSpacer {
-  background-color: -moz-Field;
-}
-
-richlistbox {
-  margin: 0 0;
-  -moz-appearance: none;
-}
-
-
-.listboxHeader {
-  margin: 0 0;
-  padding: 2px 5px;
-}
-
-%ifdef XP_MACOSX
-@media not all and (-moz-mac-yosemite-theme) {
-  .listboxHeader {
-    border-style: none;
-    -moz-appearance: none;
-    background-color: -moz-mac-chrome-active;
-    background-image: -moz-linear-gradient(rgba(255,255,255,.43), rgba(255,255,255,0));
-    border-bottom: 1px solid rgba(0, 0, 0, 0.57);
-  }
-
-  .listboxHeader:-moz-window-inactive {
-    background-color: -moz-mac-chrome-inactive;
-    border-bottom-color: rgba(0, 0, 0, 0.32);
-  }
-
-  #contactsHeader {
-    border-top: 1px solid rgb(66, 66, 66);
-  }
-
-  #contactsHeader:-moz-window-inactive {
-    border-top-color: rgb(137, 137, 137);
-  }
-}
-
-@media (-moz-mac-yosemite-theme) {
-  .listboxHeader {
-    -moz-appearance: toolbar;
-  }
-}
-%endif
-%ifndef XP_MACOSX
-.listboxHeader {
-  border-style: none;
-  -moz-appearance: none;
-  background-color: -moz-Dialog;
-%ifdef XP_WIN
-  background-image: -moz-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,0));
-%else
-  background-image: -moz-linear-gradient(rgba(255,255,255,.3), rgba(255,255,255,0));
-%endif
-}
-
-%ifdef XP_WIN
-#contactsHeader {
-  border-top: none;
-}
-%else
-#contactsHeader {
-  border-top: 1px solid rgba(0, 0, 0, 0.1);
-}
-
-#convsHeader {
-  border-top: 1px solid rgba(0, 0, 0, 0.12);
-}
-%endif
-%endif
-
-
-.convUnreadCount,
-.convUnreadTargetedCount {
-  font-weight: bold;
-  font-size: 11px;
-}
-
-.convUnreadCount {
-  color: hsl(0, 100%, 27%);
-  background-color: hsl(0, 100%, 87%);
-  padding: 0 7px;
-  border-radius: 50px;
-  margin: 1px 3px;
-}
-
-.convUnreadTargetedCount {
-  color: hsl(210, 100%, 27%);
-  background-color: hsl(210, 100%, 87%);
-  padding: 0 5px 0 7px;
-  border-radius: 50px 0 0 50px;
-  margin: 1px 0 1px 3px;
-}
-
-.convUnreadTargetedCount:not([value="0"]) + .convUnreadCount {
-  border-radius: 0 50px 50px 0;
-  margin-left: 0;
-  padding-left: 5px;
-}
-
-conv,
-contact,
-group {
-  padding: 0 2px;
-}
-
-/* The vertical padding directly on the binding would not be animated. */
-group>* {
-  padding-top: 2px;
-  padding-bottom: 2px;
-}
-
-contact[open] {
-  background: -moz-linear-gradient(45deg, -moz-Dialog, white 20%, white 80%, -moz-Dialog);
-}
-
-#buddylistbox:focus > contact[selected="true"],
-#buddylistbox:focus > group[selected="true"],
-#convlistbox:focus > conv[selected="true"] {
-  background: -moz-Dialog;
-  color: -moz-DialogText;
-}
-
-:-moz-any(contact, buddy)[droptarget] {
-  background: Highlight;
-}
-
-contact[droptarget] .contact-hbox,
-buddy[droptarget] {
-  color: HighlightText;
-}
-
-contact[droptarget] > buddy[dummy] {
-  background: Highlight;
-  color: HighlightText;
-}
-
-.contactStatusText,
-.convStatusText,
-.buddyStatusText {
-  color: GrayText;
-}
-
-.contactDisplayName,
-.contactStatusText,
-.convDisplayName,
-.convStatusText,
-.buddyDisplayName,
-.buddyStatusText {
-  margin: 0;
-}
-
-.contactDisplayName,
-.buddyDisplayName {
-  margin-inline-start: 2px;
-}
-
-/* Used for the second line of a contact-big to add space on the left
-   where the .prplBuddyIcon sits on the first line. */
-.contactIconSpace {
-  /* .prplBuddyIcon width+margins (16+3+3) + .contactStatusText margin (2) */
-  margin-inline-start: 24px;
-}
-
-.contact-hbox,
-.conv-hbox {
-  margin: 2px 0;
-  min-height: 16px;
-  overflow-x: hidden;
-}
-
-/* Avoid a strange jumping bug when hovering and the startChatBubble appears */
-.contact-vbox {
-  min-height: calc(var(--blist-item-height) * 2);
-}
-
-.hideGroupButton,
-.startChatBubble,
-.expander-up,
-.expander-down {
-  margin: 0 3px;
-  padding: 0;
-  border: none;
-  background: transparent;
-  -moz-binding: url('chrome://global/content/bindings/button.xml#button-image');
-  -moz-appearance: none;
-}
-
-.hideGroupButton {
-  margin-inline-end: 0;
-  -moz-stack-sizing: ignore;
-%ifdef XP_WIN
-  list-style-image: url("chrome://global/skin/icons/close-win7.png");
-%else
-  list-style-image: url("chrome://global/skin/icons/close.png");
-%endif
-  -moz-image-region: rect(0, 16px, 16px, 0);
-}
-.hideGroupButton:hover {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
-}
-.hideGroupButton:hover:active {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
-}
-
-.startChatBubble {
-  list-style-image: url('chrome://chat/skin/prpl-generic/icon.png');
-}
-
-.expander-up {
-  list-style-image: url("chrome://global/skin/icons/collapse.png");
-}
-
-.expander-down {
-  list-style-image: url("chrome://global/skin/icons/expand.png");
-}
-
-.contactBuddies {
-  padding-inline-start: 23px;
-}
-
-.dummyBuddyIcon {
-  margin: 1px 3px;
-  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.svg");
-}
-
-.dummyBuddyLabel {
-  font-style: italic;
-  color: GrayText;
-}
-
-.prplBuddyIcon {
-  margin: 0 3px;
-  width: 16px;
-  max-width: 16px;
-  height: 16px;
-  max-height: 16px;
-}
-
-.protoIcon,
-.statusIcon,
-.dummyBuddyIcon,
-.hideGroupButton,
-.startChatBubble,
-.expander-up,
-.expander-down {
-  max-width: 16px;
-  max-height: 16px;
-  min-height: 16px;
-  min-width: 16px;
-}
-
-group label {
-  margin: 0 2px;
-  margin-inline-end: 0;
-}
-
-.blistDisplayName[status="idle"] {
-  color: GrayText;
-}
-
-contact[state="fading"] :-moz-any(.contactDisplayName, .buddyDisplayName) {
-  color: GrayText;
-  font-style: italic;
-}
-
-group label {
-  font-weight: bold;
-}
-
-%ifdef XP_WIN
-group .twisty {
-  padding-top: 1px;
-  width: 9px; /* The image's width is 9 pixels */
-  height: 9px;
-  margin-inline-end: 3px;
-  margin-inline-start: 3px;
-  background: url("chrome://global/skin/tree/twisty.svg#open") no-repeat center;
-}
-
-group[closed] .twisty {
-  background: url("chrome://global/skin/tree/twisty.svg#clsd") no-repeat center;
-}
-%else
-%ifdef XP_MACOSX
-group .twisty {
-  width: 9px;
-  height: 9px;
-  margin-inline-end: 3px;
-  margin-inline-start: 3px;
-  background: url("chrome://global/skin/arrow/arrow-dn-sharp.gif") no-repeat center;
-}
-
-group[closed] .twisty {
-  background: url("chrome://global/skin/arrow/arrow-rit-sharp.gif") no-repeat center;
-}
-%else
-group .twisty {
-  -moz-appearance: treetwistyopen;
-}
-
-group[closed] .twisty {
-  -moz-appearance: treetwisty;
-}
-%endif
-%endif
-
-#updatesMenuItem[loading="true"] {
-  list-style-image: url("chrome://global/skin/icons/loading.png");
-}
-
-#statusArea {
-  margin: 0 0;
-  padding: 0 0;
-}
-
-#displayName {
-  font-size: 16px;
-  border-bottom: 1px solid rgba(0,0,0,0.25);
-  margin: 0 0 16px;
-}
-
-#displayName[usingDefault]:not([editing]) {
-  color: GrayText;
-}
-
-#userIconHolder {
-  border: 2px solid rgba(0,0,0,0.15);
-  border-radius: 5px;
-  overflow: hidden;
-}
-
-#userIconHolder,
-#userIcon {
-  max-width: 48px;
-  max-height: 48px;
-  width: 48px;
-  height: 48px;
-}
-
-#userIcon[src=""] {
-  background-image: url("chrome://instantbird/skin/userIcon.png");
-  background-size: contain;
-  background-repeat: no-repeat;
-}
-
-#userIcon:focus,
-#userIcon:hover {
-  border-color: rgba(0,0,0,0.35);
-  background-color: rgba(0,0,0,0.35);
-  opacity: .4;
-}
-
-#statusTypeIcon {
-  margin: 32px 0 0 32px;
-  width: 16px;
-  height: 16px;
-  min-height: 16px;
-  min-width: 16px;
-  -moz-appearance: none;
-  background-color: transparent;
-  border: none;
-}
-
-#statusImageStack,
-#displayNameAndstatusMessageStack {
-  margin: 3px 2px;
-}
-
-#statusTypeIcon dropmarker {
-  display: none;
-}
-
-%ifdef XP_WIN
-#statusTypeIcon .button-box {
-  padding: 0 0;
-  border: none;
-}
-%endif
-
-#statusTypeIcon[status="available"],
-#statusTypeAvailable {
-  list-style-image: url('chrome://chat/skin/available-16.png');
-}
-
-#statusTypeIcon[status="unavailable"],
-#statusTypeIcon[status="away"],
-#statusTypeUnavailable {
-  list-style-image: url('chrome://chat/skin/away-16.png');
-}
-
-#statusTypeIcon[status="offline"],
-#statusTypeIcon[status="invisible"],
-#statusTypeOffline {
-  list-style-image: url('chrome://chat/skin/offline-16.png');
-}
-
-#statusTypeIcon[status="idle"] {
-  list-style-image: url('chrome://chat/skin/idle-16.png');
-}
-
-%ifdef XP_MACOSX
-#statusMessage {
-  margin: 32px 0 0;
-  min-height: 16px;
-}
-
-#statusMessage[editing] {
-  margin: 29px 2px 0 -4px;
-}
-
-#displayName[editing] {
-  margin-left: -4px;
-}
-%else
-#statusMessage {
-  margin: 32px 0 0;
-}
-
-#statusMessage[editing] {
-%ifdef XP_WIN
-  margin: 30px 0 1px -2px;
-%else
-  margin: 30px -2px -2px -4px;
-%endif
-}
-
-#displayName[editing] {
-%ifdef XP_WIN
-  margin-left: -2px;
-%else
-  margin-left: -4px;
-  margin-right: -2px;
-%endif
-  margin-bottom: 18px;
-}
-%endif
-
-#statusMessage:-moz-focusring:not([editing]) {
-%ifdef XP_MACOSX
-  margin: 30px -2px -1px -22px;
-  border: 2px solid rgba(0,0,0,0.15);
-  border-radius: 5px;
-%else
-  margin: 31px -1px -1px -21px;
-  border: dotted 1px -moz-dialogtext;
-%endif
-  padding-left: 20px; /* 16px for the statusTypeIcon and 4px from the margins on the two stacks */
-}
-
-#displayName:-moz-focusring:not([editing]) {
-%ifdef XP_MACOSX
-  margin: -1px -1px 16px -2px;
-  border: 2px solid rgba(0,0,0,0.15);
-  border-radius: 5px;
-%else
-  margin: -1px -1px 17px;
-  border: dotted 1px -moz-dialogtext;
-%endif
-}
-
-#changeUserIconPanel > .panel-arrowcontainer > .panel-arrowcontent {
-  padding: 0;
-}
-
-#userIconPanelStack {
-  padding: 20px;
-}
-
-#userIconPanelImage {
-  height: 160px;
-  width: 160px;
-}
-
-#userIconPanelImage[src=""] {
-  background-image: url("chrome://instantbird/skin/userIcon.svg");
-  background-size: contain;
-  background-repeat: no-repeat;
-}
-
-#userIconPanelImageRemove {
-  -moz-appearance: none;
-  margin: 9px 9px 135px 135px;
-  padding: 0;
-  background: radial-gradient(circle, rgba(255, 255, 255, 0.25) 25%, transparent 100%);
-  border: none;
-%ifdef XP_WIN
-  list-style-image: url("chrome://global/skin/icons/close-win7.png");
-%else
-  list-style-image: url("chrome://global/skin/icons/close.png");
-%endif
-  -moz-image-region: rect(0, 16px, 16px, 0);
-}
-
-#userIconPanelImageRemove:hover:not([disabled="true"]) {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
-}
-
-#userIconPanelImageRemove:active:not([disabled="true"]) {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
-}
-
-#userIconPanelImageRemove > .toolbarbutton-icon {
-  max-width: 16px;
-}
-
-.userIconPanelButton {
-  -moz-appearance: none;
-  -moz-user-focus: normal;
-  border: none;
-  font-size: 14px;
-  border-top: 1px solid hsla(210, 4%, 10%, 0.14);
-  background-color: hsla(210, 4%, 10%, 0.07);
-  padding: 4px;
-  margin: 0 !important;
-}
-
-.userIconPanelButton:hover:not([disabled="true"]) {
-  background-color: hsla(210, 4%, 10%, 0.18);
-}
-
-.userIconPanelButton:active:not([disabled="true"]) {
-  background-color: hsla(210, 4%, 10%, 0.25);
-}
-
-#selectFileButton, #takePictureButton {
-  height: 16px;
-}
-
-#selectFileButton {
-  list-style-image: url("chrome://instantbird/skin/select-file.png");
-  -moz-image-region: rect(0, 16px, 16px, 0);
-}
-
-#selectFileButton:hover:not([disabled="true"])  {
-  -moz-image-region: rect(16px, 16px, 32px, 0);
-}
-
-.UIPanelOneButton > .toolbarbutton-text {
-  text-align: left;
-}
-
-.UIPanelOneButton > .toolbarbutton-icon {
-  margin-left: 15px;
-  margin-right: 10px;
-  width: 16px;
-  height: 16px;
-}
-
-#takePictureButton {
-  list-style-image: url("chrome://instantbird/skin/webcam.png");
-  -moz-image-region: rect(0, 16px, 16px, 0);
-}
-
-#takePictureButton:hover:not([disabled="true"]) {
-  -moz-image-region: rect(16px, 16px, 32px, 0);
-}
-
-@media (min-resolution: 2dppx) {
-  #selectFileButton {
-    list-style-image: url("chrome://instantbird/skin/select-file@2x.png");
-    -moz-image-region: rect(0, 32px, 32px, 0);
-  }
-
-  #selectFileButton:hover:not([disabled="true"]) {
-    -moz-image-region: rect(32px, 32px, 64px, 0);
-  }
-
-  #takePictureButton {
-    list-style-image: url("chrome://instantbird/skin/webcam@2x.png");
-    -moz-image-region: rect(0, 32px, 32px, 0);
-  }
-
-  #takePictureButton:hover:not([disabled="true"]) {
-    -moz-image-region: rect(32px, 32px, 64px, 0);
-  }
-
-  #userIconPanelImageRemove {
-    list-style-image: url("chrome://global/skin/icons/close@2x.png");
-    -moz-image-region: rect(0, 32px, 32px, 0);
-  }
-
-  #userIconPanelImageRemove:hover:not([disabled="true"]) {
-    -moz-image-region: rect(0, 64px, 32px, 32px);
-  }
-
-  #userIconPanelImageRemove:focus:not([disabled="true"]) {
-    -moz-image-region: rect(0, 96px, 32px, 64px);
-  }
-}
-
-.takePictureButtons {
-  margin: 0;
-  padding: 0;
-%ifdef XP_WIN
-  min-height: 60px;
-%else
-  min-height: 52px;
-%endif
-}
-
-#captureBackButton, #retakeButton {
-  border-right: 1px solid hsla(210, 4%, 10%, 0.14);
-}
-
-#webcamVideo {
-  height: 156px;
-  min-width: 213px;
-  max-width: 213px;
-  margin-left: -30px;
-}
-
-#webcamPhoto {
-  height: 160px;
-  min-width: 160px;
-  max-width: 160px;
-  margin: 20px;
-  padding: 0;
-}
-
-#userIconPanelImage, #webcamPhoto, #webcamOverflow {
-  border: 3px solid rgba(0, 0, 0, 0.15);
-  border-radius: 3px;
-}
-
-#webcamOverflow {
-  height: 160px;
-  max-width: 160px;
-  margin: 20px;
-  padding: 0;
-  overflow: hidden;
-}
deleted file mode 100644
--- a/im/themes/conversation-aero.css
+++ /dev/null
@@ -1,23 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include conversation.css
-
-@media all and (-moz-windows-theme: aero) {
-  /* Move participant list one pixel to the right to avoid double borders. */
-  .conv-nicklist {
-    margin-right: -1px;
-  }
-
-  /* Fix broken styling (bug 616) with a border over the input box. */
-  .conv-bottom {
-    border-top: 1px solid rgba(0, 0, 0, 0.25);
-  }
-
-  .alltargets-item-icon-stack {
-    -moz-appearance: none;
-    padding-left: 5px;
-    padding-right: 8px;
-  }
-}
deleted file mode 100644
--- a/im/themes/conversation.css
+++ /dev/null
@@ -1,534 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-%ifdef XP_UNIX
-%ifndef XP_MACOSX
-%define XP_LINUX
-%endif
-%endif
-
-.browser {
-  margin: 0 0;
-}
-
-.conv-bottom, .conv-nicklist {
-  margin: 0 0;
-}
-
-.convBox {
-  min-height: 135px;
-}
-
-.conv-top {
-  min-height: 60px;
-}
-
-.conv-top-info {
-  margin: 0 0;
-  padding: 0 0;
-  border-style: none;
-  -moz-appearance: none;
-%ifdef XP_MACOSX
-  background-color: -moz-mac-chrome-active;
-  background-image: -moz-linear-gradient(rgba(255,255,255,.43), rgba(255,255,255,0));
-  border-bottom: 1px solid rgba(0, 0, 0, 0.57);
-}
-
-.conv-top-info:-moz-window-inactive {
-  background-color: -moz-mac-chrome-inactive;
-  border-bottom-color: rgba(0, 0, 0, 0.32);
-%else
-  background-color: -moz-Dialog;
-%ifdef XP_WIN
-  background-image: -moz-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,0));
-%else
-  background-image: -moz-linear-gradient(rgba(255,255,255,.3), rgba(255,255,255,0));
-%endif
-%ifndef XP_WIN
-  border-bottom: 1px solid ThreeDShadow;
-%else
-  border-bottom: none;
-%endif
-%endif
-}
-
-.userIconHolder {
-  border: 2px solid rgba(0,0,0,0.15);
-  border-radius: 5px;
-  overflow: hidden;
-}
-
-.userIcon,
-.userIconHolder {
-  max-width: 48px;
-  max-height: 48px;
-  width: 48px;
-  height: 48px;
-}
-
-.userIcon:not([src]),
-.userIconHolder:not([userIcon]) {
-  display: none;
-}
-
-.userIcon[src=""] {
-  background-image: url("chrome://instantbird/skin/userIcon.png");
-  background-size: contain;
-  background-repeat: no-repeat;
-}
-
-.statusTypeIcon {
-  margin: 0 0;
-  min-height: 16px;
-  min-width: 16px;
-  max-height: 16px;
-  max-width: 16px;
-  -moz-appearance: none;
-  background-color: transparent;
-  border: none;
-}
-
-.statusMessage {
-  margin: 0 0 !important;
-%ifdef XP_MACOSX
-  min-height: 16px;
-%endif
-}
-
-.statusMessage[noTopic]:not([editing]),
-.statusMessageWithDash[noTopic] {
-  font-style: italic;
-}
-
-.alltargets-button > .toolbarbutton-text,
-.alltargets-button > .toolbarbutton-menu-dropmarker {
-  display: none;
-}
-
-/* Remove the margin set by the menu dropmarker so that target switcher button
- * doesn't have uneven padding. */
-.alltargets-button > .toolbarbutton-icon {
-  margin: 0;
-}
-
-.alltargets-item[selected="true"] {
-  font-weight: bold;
-}
-
-/* The Australis themed button is borrowed from the Firefox toolbarbutton
- * (browser/themes/windows/browser.css). The properties are set in class
- * toolbarbutton-1 of the CSS file. */
-.conv-top-info > toolbarbutton {
-  -moz-appearance: none;
-  max-height: 22px;
-  border: 1px solid transparent;
-  padding: 2px 3px;
-  margin: 0 0;
-}
-
-.conv-top-info > toolbarbutton:hover:not([disabled="true"]) {
-  background: hsla(0,0%,100%,0.5) linear-gradient(hsla(0,0%,100%,0.1), hsla(0,0%,100%,0.2)) padding-box;
-  transition: background-color 250ms;
-  border: 1px solid hsla(0,0%,0%,0.5);
-  box-shadow: 0 1px 0 hsla(0,0%,100%,0.5),
-              0 1px 0 hsla(0,0%,100%,0.7) inset;
-  border-radius: 3px;
-}
-
-.conv-top-info > toolbarbutton[open="true"],
-.conv-top-info > toolbarbutton[open="true"]:hover,
-.conv-top-info > toolbarbutton:active:not([disabled="true"]) {
-  background: linear-gradient(transparent, rgba(0,0,0,0.15)) !important;
-  border: 1px solid hsla(0,0%,0%,0.5);
-  box-shadow: 0 1px 0 hsla(0,0%,100%,0.5),
-              0 1px 0 hsla(0,0%,0%,0.05) inset,
-              0 1px 1px hsla(0,0%,0%,0.2) inset;
-  border-radius: 3px;
-}
-
-.displayNameAndToolbar {
-  border-bottom: 1px solid rgba(0,0,0,0.25);
-  margin: 1px 4px 20px 0;
-}
-
-.status-overlay-icon[status="away"],
-.status-overlay-icon[status="unavailable"] {
-  list-style-image: url('chrome://chat/skin/away.png');
-}
-
-.status-overlay-icon[status="idle"] {
-  list-style-image: url('chrome://chat/skin/idle.png');
-}
-
-.status-overlay-icon[status="mobile"] {
-  list-style-image: url('chrome://chat/skin/mobile.png');
-}
-
-.status-overlay-icon[status="offline"] {
-  list-style-image: url('chrome://chat/skin/offline.png');
-}
-
-.status-overlay-icon[status="unknown"] {
-  list-style-image: url('chrome://chat/skin/unknown.png');
-}
-
-@media all and (min-height: 251px) {
-  .statusImageStack,
-  .displayNameAndstatusMessageStack {
-    margin: 2px 0 2px 2px;
-  }
-
-  .displayNameAndstatusMessageStack {
-    margin-inline-start: 4px;
-  }
-
-  .statusMessage {
-    margin-top: 32px !important;
-  }
-
-  .statusMessage[editing] {
-%ifdef XP_MACOSX
-    margin: 29px 0 -1px -4px !important;
-%else
-%ifdef XP_WIN
-    margin: 28px 0 -1px -2px !important;
-%else
-    margin: 29px 0 -3px -4px !important;
-%endif
-%endif
-  }
-
-  .displayName {
-    font-size: 16px;
-    margin: 5px 0 0 0 !important;
-    padding-right: 20px;
-  }
-
-  .statusTypeIcon {
-    margin: 32px 0 0;
-  }
-
-  .convToolbar {
-    margin: 1px 0 0;
-  }
-
-  .userIconHolder[userIcon] + .statusTypeIcon {
-    margin-left: 32px;
-  }
-}
-
-@media all and (max-height: 250px) {
-  .conv-top-info {
-    -moz-box-align: baseline;
-  }
-
-  .displayName,
-  .statusMessageWithDash {
-    margin: 2px 0 !important;
-  }
-
-  .statusMessage[editing] {
-%ifdef XP_WIN
-    margin: -1px 2px 0px 8px !important;
-%else
-    margin: -3px 0 -1px 9px !important;
-%endif
-  }
-
-  .statusTypeIcon {
-    margin: 1px 3px;
-  }
-
-  .convToolbar {
-    margin: -1px 1px 0;
-  }
-
-  .conv-top-info > toolbarbutton {
-    max-height: 20px;
-    padding: 1px 2px;
-  }
-}
-
-.conv-messages {
-  min-width: 150px;
-%ifndef XP_MACOSX
-%ifndef XP_WIN
-  border-bottom: solid 1px GrayText;
-%else
-  border: 1px solid rgba(0, 0, 0, 0.25);
-  border-left: none;
-  border-right: none !important;
-%endif
-%endif
-}
-
-%ifndef XP_MACOSX
-.conv-messages[chat] {
-  border-right: solid 1px GrayText;
-}
-%endif
-
-
-/* Status text bar */
-
-.conv-status-container {
-  display: block;
-  padding: 3px;
-  padding-bottom: 1px;
-%ifdef XP_MACOSX
-  border-top: 1px solid GrayText;
-  margin-bottom: -1px; /* match splitter-bottom height */
-%else
-  margin-bottom: -3px; /* match splitter-bottom height */
-%endif
-
-  /* Animation copied from the findbar in Firefox */
-  transition-property: margin-top, opacity, visibility;
-  transition-duration: 100ms, 100ms, 0s;
-  transition-timing-function: ease-in-out, ease-in-out, linear;
-}
-
-.conv-status-container[hidden] {
-  /* Override display:none to make the transition work. */
-  display: -moz-box;
-  visibility: collapse;
-  margin-top: -1em;
-  opacity: 0;
-  transition-delay: 0s, 0s, 100ms;
-}
-
-
-/* Input box */
-
-.conv-textbox {
-  margin: 0;
-  -moz-appearance: none;
-}
-
-%ifdef XP_MACOSX
-.conv-textbox {
-  padding: 3px;
-  border: none;
-  box-shadow: inset 0 1px 3px 0px rgba(0, 0, 0, 0.6);
-}
-
-.conv-textbox[focused="true"] {
-  box-shadow: inset 0 0 2px 1px rgba(40, 120, 212, 0.9),
-                    0 0 2px 0px rgba(40, 120, 212, 0.6),
-              inset 0 1px 2px 0px rgba(0, 0, 0, 0.5);
-}
-
-.conv-textbox[invalidInput="true"] {
-  box-shadow: inset 0 0 2px 1px rgba(255, 0, 0, 0.9),
-                    0 0 2px 0px rgba(255, 0, 0, 0.6),
-              inset 0 1px 2px 0px rgba(0, 0, 0, 0.4);
-}
-
-%else
-.conv-textbox {
-  padding: 2px;
-  border: 1px solid transparent;
-}
-
-.conv-textbox[invalidInput="true"] {
-  border-color: red;
-}
-
-.conv-textbox > .textbox-input-box {
-  background: inherit;
-}
-
-%ifndef XP_WIN
-.conv-textbox {
-  margin-inline-start: 1px;
-}
-%endif
-%endif
-
-
-/* Character counter */
-
-.conv-counter {
-  color: black;
-  background-color: rgba(246, 246, 246, 0.7);
-  border-inline-start: 1px solid rgb(200, 200, 200);
-  border-top: 1px solid rgb(200, 200, 200);
-  font-size: 120%;
-  padding-top: 0;
-  padding-inline-start: 5px;
-}
-
-.conv-counter:-moz-locale-dir(ltr) {
-  border-top-left-radius: 3px;
-}
-
-.conv-counter:-moz-locale-dir(rtl) {
-  border-top-right-radius: 3px;
-}
-
-.conv-counter[value=""] {
-  display: none;
-}
-
-/* Negative counter values (user went over the character limit). */
-.conv-counter[value^="-"] {
-  color: red;
-}
-
-%ifdef XP_MACOSX
-.conv-counter {
-  padding-bottom: 0;
-  padding-inline-end: 5px;
-  margin-inline-end: 2px;
-  margin-bottom: 2px !important; /* override 4px from description */
-}
-
-%else
-.conv-counter {
-  padding-bottom: 1px;
-  padding-inline-end: 6px;
-  margin: 0 !important;  /* override margins from description */
-}
-
-.conv-counter[value^="-"] {
-  margin-bottom: 1px !important;
-  /* The 6px padding-end from .conv-counter is split into a 1px
-     margin-end (to avoid the border) and 5px padding-end (as
-     regular padding). */
-  margin-inline-end: 1px !important;
-  padding-top: 1px;
-  padding-bottom: 0;
-  padding-inline-end: 5px;
-}
-%endif
-
-
-/* Splitters */
-
-.splitter {
-  margin: 0;
-  border-style: none;
-%ifdef XP_MACOSX
-  min-height: 2px;
-  background: -moz-linear-gradient(top, rgba(0,0,0,0.35), transparent);
-%else
-  height: 3px;
-  background: transparent;
-%endif
-}
-
-.splitter-bottom {
-  background: #ddd; /* match URL popup bottom edge from tabbrowser-*.css */
-%ifndef XP_LINUX
-  min-height: 1px;
-  height: 1px;
-%endif
-}
-
-%ifdef XP_MACOSX
-grippy {
-  display: none;
-}
-
-.splitter.conv-chat {
-  background: -moz-linear-gradient(top, #404040, rgba(0,0,0,0.35));
-  min-width: 1px;
-  width: 1px;
-}
-
-.splitter.conv-chat:-moz-window-inactive {
-  background: rgba(0,0,0,0.35);
-}
-
-.splitter.conv-chat[state="collapsed"] {
-  width: 3px;
-}
-%else
-%ifdef XP_WIN
-.splitter.conv-chat {
-  border-left: 1px solid rgba(0, 0, 0, 0.25);
-}
-
-/* Splitter style change above somehow made it smaller, fix this here: */
-grippy {
-  margin: 0 1px;
-}
-%endif
-%endif
-
-
-#conv-toolbar {
-  border-style: none;
-}
-
-.listcell-label {
-  font-weight: bold;
-  padding-inline-start: 1px;
-%ifdef XP_MACOSX
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.4);
-%endif
-}
-
-.listcell-icon {
-  min-width: 16px;
-  margin: 0 2px;
-}
-
-%ifdef XP_MACOSX
-.conv-nicklist-header {
-  -moz-appearance: treeheadercell;
-  margin-right: -1px;
-}
-
-%endif
-.conv-nicklist-header-label {
-%ifdef XP_MACOSX
-  margin-inline-start: 3px !important;
-  margin-top: 1px !important;
-  margin-bottom: 0 !important;
-%else
-  font-weight: bold;
-  margin-inline-start: 0 !important;
-%endif
-  margin-inline-end: 2px !important;
-}
-
-%ifdef XP_MACOSX
-.conv-nicklist {
-  -moz-appearance: -moz-mac-source-list;
-  -moz-font-smoothing-background-color: -moz-mac-source-list;
-  width: 160px;
-  border: 0;
-}
-%endif
-
-.listitem-iconic[inactive] > .listcell-iconic > .listcell-icon {
-  opacity: 0.45;
-}
-
-.listitem-iconic[inactive][selected] > .listcell-iconic > .listcell-icon {
-  opacity: 0.7;
-}
-
-.listitem-iconic[inactive] > .listcell-iconic > .listcell-label {
-  color: GrayText !important;
-  font-weight: normal;
-}
-
-.listitem-iconic[inactive][selected] > .listcell-iconic > .listcell-label {
-%ifdef MACOSX
-  color: -moz-DialogText !important;
-%else
-  color: -moz-cellhighlighttext !important;
-%endif
-}
-
-.conv-nicklist:focus > .listitem-iconic[inactive][selected] > .listcell-iconic > .listcell-label {
-  color: HighlightText !important;
-}
-
-.alltargets-item-icon {
-  min-width: 16px;
-  min-height: 16px;
-}
deleted file mode 100644
--- a/im/themes/debugLog.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-body {
-  margin: 0;
-}
-
-table {
-  border-collapse: collapse;
-  font-size: small;
-}
-
-td {
-  padding: 5px;
-}
-
-tr {
-  border-bottom: 1px solid rgba(0, 0, 0, 0.4);
-}
-
-tr.debug {
-  background-color: #ecffe0;
-}
-
-tr.log {
-  background-color: #d3edff;
-}
-
-tr.warn {
-  background-color: #f8f3cc;
-}
-
-tr.error {
-  background-color: #ffd0dc;
-}
-
-td.time {
-  white-space: nowrap;
-  vertical-align: top;
-}
deleted file mode 100644
--- a/im/themes/debugLogPanel.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.debugLogTab-button {
-  -moz-appearance: toolbarbutton;
-}
-
-.debugLogTab-toolbar {
-  margin: 0;
-  padding: 2px;
-  border-style: none;
-  -moz-appearance: none;
-%ifdef XP_MACOSX
-  background-color: -moz-mac-chrome-active;
-  background-image: -moz-linear-gradient(rgba(255,255,255,.43), rgba(255,255,255,0));
-  border-bottom: 1px solid rgba(0, 0, 0, 0.57);
-}
-
-.debugLogTab-toolbar:-moz-window-inactive {
-  background-color: -moz-mac-chrome-inactive;
-  border-bottom-color: rgba(0, 0, 0, 0.32);
-%else
-  background-color: -moz-Dialog;
-%ifdef XP_WIN
-  background-image: -moz-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,0));
-%else
-  background-image: -moz-linear-gradient(rgba(255,255,255,.3), rgba(255,255,255,0));
-%endif
-  border-bottom: 1px solid ThreeDShadow;
-%endif
-}
deleted file mode 100644
--- a/im/themes/engineManager.css
+++ /dev/null
@@ -1,16 +0,0 @@
-%if 0
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-%endif
-
-#engineList treechildren::-moz-tree-image(engineName) {
-  margin-inline-end: 4px;
-  margin-inline-start: 1px;
-  width: 16px;
-  height: 16px;
-}
-
-#engineList treechildren::-moz-tree-row {
-  height: 20px !important;
-}
deleted file mode 100644
index aca3a925c657dd79b38c6a760024536c70fb8304..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2e89f37b3111a2a77345cd4bbfbbd77a017713e4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ff4f21f9a6115db4829bb0ac6094ee1cd78c603d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/instantbird-aero.css
+++ /dev/null
@@ -1,41 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include instantbird.css
-
-/* This applies only if Glass is available. */
-@media all and (-moz-windows-compositor) {
-  #convWindow {
-    -moz-appearance: -moz-win-borderless-glass;
-    background: transparent;
-  }
-}
-
-/* Our fallback for Aero Basic: set the background color appropriately. */
-@media not all and (-moz-windows-compositor) {
-  #convWindow:-moz-system-metric(windows-default-theme) {
-    background-color: rgb(185, 209, 234);
-  }
-  #convWindow:-moz-system-metric(windows-default-theme):-moz-window-inactive {
-    background-color: rgb(215, 228, 242);
-  }
-}
-
-/* Use for both Aero themes. */
-@media all and (-moz-windows-theme: aero) {
-  #statusbar-display {
-    -moz-appearance: none;
-    border-radius: 0 0 5px 5px;
-    border: none;
-    background: transparent;
-  }
-
-  #conversations {
-    padding-top: 2px;
-    border-radius: 5px 5px 0 0;
-    border: 1px solid rgba(0, 0, 0, 0.25);
-    border-bottom: none;
-    background-color: rgba(255, 255, 255, 0.8);
-  }
-}
deleted file mode 100644
--- a/im/themes/instantbird.css
+++ /dev/null
@@ -1,122 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-@import url("chrome://chat/skin/status.css");
-
-tabbox {
-  margin: 0 0;
-}
-
-tabpanels {
-  -moz-appearance: none;
-}
-
-%ifndef XP_MACOSX
-notification > hbox {
-  border: none !important;
-  border-bottom: 1px solid ThreeDShadow !important;
-}
-%endif
-
-/* Tab colors */
-tab[unread],
-.alltabs-item[unread] {
-  color: #d22d2d !important
-}
-
-tab[typing],
-.alltabs-item[typing] {
-  color: #328c3c !important;
-}
-
-tab[typed],
-.alltabs-item[typed] {
-  color: #d2772d !important;
-}
-
-tab[attention],
-.alltabs-item[attention] {
-  color: #2d43d2 !important;
-}
-
-/* Tab icons */
-.tabbrowser-tab,
-.alltabs-item > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.svg");
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-
-.tabbrowser-tab[type="conversation"],
-.alltabs-item[type="conversation"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/unknown-16.png");
-}
-
-.tabbrowser-tab[type="addons"],
-.alltabs-item[type="addons"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://mozapps/skin/extensions/extensionGeneric-16.png");
-}
-
-.tabbrowser-tab[type="newtab"],
-.alltabs-item[type="newtab"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://instantbird/skin/newConversation.png");
-}
-
-.tabbrowser-tab {
-  text-align: center;
-}
-
-.tabbrowser-tab[chat],
-.alltabs-item[chat] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/chat-16.png") !important;
-}
-.tabbrowser-tab[chat][status="joining"],
-.alltabs-item[chat][status="joining"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://global/skin/icons/loading.png") !important;
-  -moz-image-region: auto;
-}
-.tabbrowser-tab[chat][status="left"],
-.alltabs-item[chat][status="left"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/chat-left-16.png") !important;
-}
-.tabbrowser-tab[chat][prpl="prpl-twitter"],
-.alltabs-item[chat][prpl="prpl-twitter"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://prpl-twitter/skin/icon.png") !important;
-}
-.tabbrowser-tab[chat][prpl="prpl-twitter"][status="left"],
-.alltabs-item[chat][prpl="prpl-twitter"][status="left"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://prpl-twitter/skin/icon-left.png") !important;
-}
-
-.tabbrowser-tab[status="offline"],
-.alltabs-item[status="offline"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/offline-16.png") !important;
-}
-.tabbrowser-tab[status="available"],
-.alltabs-item[status="available"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/available-16.png") !important;
-}
-.tabbrowser-tab[status="away"],
-.tabbrowser-tab[status="unavailable"],
-.alltabs-item[status="away"] > .menu-iconic-left > .menu-iconic-icon,
-.alltabs-item[status="unavailable"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/away-16.png") !important;
-}
-.tabbrowser-tab[status="idle"],
-.alltabs-item[status="idle"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/idle-16.png") !important;
-}
-.tabbrowser-tab[status="mobile"],
-.alltabs-item[status="mobile"] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/mobile-16.png") !important;
-}
-
-.tabbrowser-tab[typing],
-.alltabs-item[typing] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/typing-16.png") !important;
-}
-
-.tabbrowser-tab[typed],
-.alltabs-item[typed] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://chat/skin/typed-16.png") !important;
-}
deleted file mode 100644
--- a/im/themes/jar.mn
+++ /dev/null
@@ -1,347 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-instantbird.jar:
-#ifndef XP_WIN
-% skin instantbird classic/1.0 %skin/classic/instantbird/
-#else
-% skin instantbird classic/1.0 %skin/classic/instantbird/ os=WINNT osversion<6
-% skin instantbird classic/1.0 %skin/classic/instantbird/ os!=WINNT
-% skin instantbird classic/1.0 %skin/classic/aero/instantbird/ os=WINNT osversion>=6
-#endif
-*	skin/classic/instantbird/accounts.css
-	skin/classic/instantbird/alert.css
-% style chrome://global/content/alerts/alert.xul chrome://instantbird/skin/alert.css
-*	skin/classic/instantbird/richlistbox.css
-*	skin/classic/instantbird/accountWizard.css
-*	skin/classic/instantbird/newtab.css
-	skin/classic/instantbird/debugLog.css
-*	skin/classic/instantbird/debugLogPanel.css
-	skin/classic/instantbird/newConversation.png
-	skin/classic/instantbird/founder.png
-	skin/classic/instantbird/operator.png
-	skin/classic/instantbird/half-operator.png
-	skin/classic/instantbird/voice.png
-*	skin/classic/instantbird/blist.css
-*	skin/classic/instantbird/conversation.css
-*	skin/classic/instantbird/engineManager.css
-*	skin/classic/instantbird/instantbird.css
-	skin/classic/instantbird/menulist.css
-	skin/classic/instantbird/menus.css
-*	skin/classic/instantbird/viewlog.css
-	skin/classic/instantbird/newMessage.png
-	skin/classic/instantbird/userIcon.png
-	skin/classic/instantbird/userIcon.svg
-	skin/classic/instantbird/multiUserIcon.png
-	skin/classic/instantbird/webcam.png		(webRTC-shareDevice-16.png)
-	skin/classic/instantbird/select-file.png	(select-file.png)
-#ifdef XP_UNIX
-#ifdef XP_MACOSX
-	skin/classic/instantbird/tag.png                (tag-mac.png)
-	skin/classic/instantbird/tag@2x.png             (tag-mac@2x.png)
-	skin/classic/instantbird/actionicon-tab.png     (actionicon-tab-mac.png)
-	skin/classic/instantbird/actionicon-tab@2x.png  (actionicon-tab-mac@2x.png)
-	skin/classic/instantbird/webcam@2x.png          (webRTC-shareDevice-16@2x.png)
-	skin/classic/instantbird/select-file@2x.png     (select-file@2x.png)
-#else
-	skin/classic/instantbird/tag.png    (tag-linux.png)
-	skin/classic/instantbird/actionicon-tab.png    (actionicon-tab-linux.png)
-#endif
-#else
-	skin/classic/instantbird/tag.png    (tag-win.png)
-	skin/classic/instantbird/actionicon-tab.png    (actionicon-tab-win.png)
-#endif
-#ifdef XP_UNIX
-#ifdef XP_MACOSX
-	skin/classic/instantbird/preferences/Options.png        (preferences-pinstripe/Options.png)
-	skin/classic/instantbird/preferences/alwaysAsk.png      (preferences-pinstripe/alwaysAsk.png)
-	skin/classic/instantbird/preferences/application.png    (preferences-pinstripe/application.png)
-	skin/classic/instantbird/preferences/applications.css   (preferences-pinstripe/applications.css)
-	skin/classic/instantbird/preferences/preferences.css    (preferences-pinstripe/preferences.css)
-	skin/classic/instantbird/preferences/saveFile.png       (preferences-pinstripe/saveFile.png)
-#else
-	skin/classic/instantbird/preferences/Options.png        (preferences-gnomestripe/Options.png)
-	skin/classic/instantbird/preferences/alwaysAsk.png      (preferences-gnomestripe/alwaysAsk.png)
-	skin/classic/instantbird/preferences/applications.css   (preferences-gnomestripe/applications.css)
-	skin/classic/instantbird/preferences/preferences.css    (preferences-gnomestripe/preferences.css)
-	skin/classic/instantbird/preferences/mail.png           (preferences-gnomestripe/mail.png)
-#endif
-#else
-	skin/classic/instantbird/preferences/Options.png        (preferences-winstripe/Options.png)
-	skin/classic/instantbird/preferences/alwaysAsk.png      (preferences-winstripe/alwaysAsk.png)
-	skin/classic/instantbird/preferences/application.png    (preferences-winstripe/application.png)
-	skin/classic/instantbird/preferences/applications.css   (preferences-winstripe/applications.css)
-	skin/classic/instantbird/preferences/preferences.css    (preferences-winstripe/preferences.css)
-	skin/classic/instantbird/preferences/saveFile.png       (preferences-winstripe/saveFile.png)
-	skin/classic/instantbird/preferences/mail.png           (preferences-winstripe/mail.png)
-#endif
-#ifdef XP_UNIX
-#ifdef XP_MACOSX
-*	skin/classic/instantbird/tabbrowser.css                         (tabbrowser-pinstripe/tabbrowser.css)
-	skin/classic/instantbird/tabbrowser/newtab.png			(tabbrowser-pinstripe/newtab.png)
-	skin/classic/instantbird/tabbrowser/newtab@2x.png		(tabbrowser-pinstripe/newtab@2x.png)
-	skin/classic/instantbird/tabbrowser/tab-arrow-left.png		(tabbrowser-pinstripe/tab-arrow-left.png)
-	skin/classic/instantbird/tabbrowser/tab-arrow-left@2x.png	(tabbrowser-pinstripe/tab-arrow-left@2x.png)
-	skin/classic/instantbird/tabbrowser/tab-arrow-right.png		(tabbrowser-pinstripe/tab-arrow-right.png)
-	skin/classic/instantbird/tabbrowser/tab-arrow-right@2x.png	(tabbrowser-pinstripe/tab-arrow-right@2x.png)
-	skin/classic/instantbird/tabbrowser/tab-overflow-border.png     (tabbrowser-pinstripe/tab-overflow-border.png)
-	skin/classic/instantbird/tabbrowser/tab-top-hover-active.png    (tabbrowser-pinstripe/tab-top-hover-active.png)
-	skin/classic/instantbird/tabbrowser/tab-top-hover-active@2x.png (tabbrowser-pinstripe/tab-top-hover-active@2x.png)
-	skin/classic/instantbird/tabbrowser/tab-top-normal-active.png   (tabbrowser-pinstripe/tab-top-normal-active.png)
-	skin/classic/instantbird/tabbrowser/tab-top-normal-active@2x.png   (tabbrowser-pinstripe/tab-top-normal-active@2x.png)
-	skin/classic/instantbird/tabbrowser/tab-top-selected-active.png (tabbrowser-pinstripe/tab-top-selected-active.png)
-	skin/classic/instantbird/tabbrowser/tab-top-selected-active@2x.png (tabbrowser-pinstripe/tab-top-selected-active@2x.png)
-	skin/classic/instantbird/tabbrowser/tabDragIndicator.png	(tabbrowser-pinstripe/tabDragIndicator.png)
-	skin/classic/instantbird/tabbrowser/tabDragIndicator@2x.png	(tabbrowser-pinstripe/tabDragIndicator@2x.png)
-	skin/classic/instantbird/tabbrowser/alltabs-box-bkgnd-icon.png	(tabbrowser-pinstripe/alltabs-box-bkgnd-icon.png)
-	skin/classic/instantbird/lion/tabbrowser/alltabs-box-bkgnd-icon.png	(tabbrowser-pinstripe/alltabs-box-bkgnd-icon-lion.png)
-	skin/classic/instantbird/tabbrowser/alltabs-box-bkgnd-icon@2x.png	(tabbrowser-pinstripe/alltabs-box-bkgnd-icon-lion@2x.png)
-#else
-*	skin/classic/instantbird/tabbrowser.css				(tabbrowser-gnomestripe/tabbrowser.css)
-	skin/classic/instantbird/tabbrowser/tab.png			(tabbrowser-gnomestripe/tab.png)
-	skin/classic/instantbird/tabbrowser/tab-overflow-border.png	(tabbrowser-gnomestripe/tab-overflow-border.png)
-	skin/classic/instantbird/tabbrowser/tabDragIndicator.png	(tabbrowser-gnomestripe/tabDragIndicator.png)
-#endif
-#else
-*	skin/classic/instantbird/tabbrowser.css                         (tabbrowser-winstripe/tabbrowser.css)
-	skin/classic/instantbird/tabbrowser/newtab.png			(tabbrowser-winstripe/newtab.png)
-	skin/classic/instantbird/tabbrowser/tab.png			(tabbrowser-winstripe/tab.png)
-	skin/classic/instantbird/tabbrowser/tab-arrow-left.png		(tabbrowser-winstripe/tab-arrow-left.png)
-	skin/classic/instantbird/tabbrowser/tab-overflow-border.png	(tabbrowser-winstripe/tab-overflow-border.png)
-	skin/classic/instantbird/tabbrowser/tabDragIndicator.png	(tabbrowser-winstripe/tabDragIndicator.png)
-	skin/classic/instantbird/tabbrowser/mainwindow-dropdown-arrow.png	(tabbrowser-winstripe/mainwindow-dropdown-arrow.png)
-#endif
-#ifdef XP_WIN
-*	skin/classic/aero/instantbird/accounts.css		(accounts-aero.css)
-	skin/classic/aero/instantbird/alert.css
-*	skin/classic/aero/instantbird/richlistbox.css
-*	skin/classic/aero/instantbird/accountWizard.css
-	skin/classic/aero/instantbird/founder.png
-	skin/classic/aero/instantbird/operator.png
-	skin/classic/aero/instantbird/half-operator.png
-	skin/classic/aero/instantbird/voice.png
-*	skin/classic/aero/instantbird/blist.css			(blist-aero.css)
-*	skin/classic/aero/instantbird/conversation.css		(conversation-aero.css)
-	skin/classic/aero/instantbird/debugLog.css
-*	skin/classic/aero/instantbird/debugLogPanel.css
-*	skin/classic/aero/instantbird/engineManager.css
-*	skin/classic/aero/instantbird/instantbird.css		(instantbird-aero.css)
-	skin/classic/aero/instantbird/menulist.css
-	skin/classic/aero/instantbird/menus.css
-*	skin/classic/aero/instantbird/newtab.css
-*	skin/classic/aero/instantbird/viewlog.css
-	skin/classic/aero/instantbird/newMessage.png
-	skin/classic/aero/instantbird/expand.png
-	skin/classic/aero/instantbird/collapse.png
-	skin/classic/aero/instantbird/userIcon.png
-	skin/classic/aero/instantbird/userIcon.svg
-	skin/classic/aero/instantbird/multiUserIcon.png
-	skin/classic/aero/instantbird/webcam.png	(webRTC-shareDevice-16.png)
-	skin/classic/aero/instantbird/select-file.png	(select-file.png)
-	skin/classic/aero/instantbird/newConversation.png
-	skin/classic/aero/instantbird/tag.png		(tag-aero.png)
-	skin/classic/aero/instantbird/actionicon-tab.png        (actionicon-tab-win.png)
-	skin/classic/aero/instantbird/preferences/Options.png        (preferences-winstripe/Options-aero.png)
-	skin/classic/aero/instantbird/preferences/alwaysAsk.png      (preferences-winstripe/alwaysAsk-aero.png)
-	skin/classic/aero/instantbird/preferences/application.png    (preferences-winstripe/application-aero.png)
-	skin/classic/aero/instantbird/preferences/applications.css   (preferences-winstripe/applications.css)
-	skin/classic/aero/instantbird/preferences/preferences.css    (preferences-winstripe/preferences.css)
-	skin/classic/aero/instantbird/preferences/saveFile.png       (preferences-winstripe/saveFile-aero.png)
-	skin/classic/aero/instantbird/preferences/mail.png           (preferences-winstripe/mail-aero.png)
-*	skin/classic/aero/instantbird/tabbrowser.css                            (tabbrowser-winstripe/tabbrowser.css)
-	skin/classic/aero/instantbird/tabbrowser/newtab.png			(tabbrowser-winstripe/newtab.png)
-	skin/classic/aero/instantbird/tabbrowser/tab.png			(tabbrowser-winstripe/tab.png)
-	skin/classic/aero/instantbird/tabbrowser/tab-arrow-left.png		(tabbrowser-winstripe/tab-arrow-left.png)
-	skin/classic/aero/instantbird/tabbrowser/tab-overflow-border.png	(tabbrowser-winstripe/tab-overflow-border.png)
-	skin/classic/aero/instantbird/tabbrowser/tabDragIndicator.png		(tabbrowser-winstripe/tabDragIndicator.png)
-	skin/classic/aero/instantbird/tabbrowser/mainwindow-dropdown-arrow.png	(tabbrowser-winstripe/mainwindow-dropdown-arrow.png)
-#endif
-% skin instantbird-sounds classic/1.0 %skin/classic/instantbird/sounds/
-	skin/classic/instantbird/sounds/alert.wav	(sounds/alert.wav)
-	skin/classic/instantbird/sounds/login.wav	(sounds/login.wav)
-	skin/classic/instantbird/sounds/logout.wav	(sounds/logout.wav)
-	skin/classic/instantbird/sounds/receive.wav	(sounds/receive.wav)
-	skin/classic/instantbird/sounds/send.wav	(sounds/send.wav)
-% skin instantbird-emoticons classic/1.0 %skin/classic/instantbird/smileys/
-	skin/classic/instantbird/smileys/theme.js              (smileys/theme.js)
-	skin/classic/instantbird/smileys/angry.png             (smileys/angry.png)
-	skin/classic/instantbird/smileys/confused.png          (smileys/confused.png)
-	skin/classic/instantbird/smileys/cool.png              (smileys/cool.png)
-	skin/classic/instantbird/smileys/cry.png               (smileys/cry.png)
-	skin/classic/instantbird/smileys/embarrassed.png       (smileys/embarrassed.png)
-	skin/classic/instantbird/smileys/grin.png              (smileys/grin.png)
-	skin/classic/instantbird/smileys/heart.png             (smileys/heart.png)
-	skin/classic/instantbird/smileys/manga_annoyed.png     (smileys/manga_annoyed.png)
-	skin/classic/instantbird/smileys/manga_embarrassed.png (smileys/manga_embarrassed.png)
-	skin/classic/instantbird/smileys/manga_smile.png       (smileys/manga_smile.png)
-	skin/classic/instantbird/smileys/manga_stunned.png     (smileys/manga_stunned.png)
-	skin/classic/instantbird/smileys/manga_tired.png       (smileys/manga_tired.png)
-	skin/classic/instantbird/smileys/sad.png               (smileys/sad.png)
-	skin/classic/instantbird/smileys/shocked.png           (smileys/shocked.png)
-	skin/classic/instantbird/smileys/slant.png             (smileys/slant.png)
-	skin/classic/instantbird/smileys/slant2.png            (smileys/slant2.png)
-	skin/classic/instantbird/smileys/smile.png             (smileys/smile.png)
-	skin/classic/instantbird/smileys/sp_laugh.png          (smileys/sp_laugh.png)
-	skin/classic/instantbird/smileys/straight_face.png     (smileys/straight_face.png)
-	skin/classic/instantbird/smileys/tongue.png            (smileys/tongue.png)
-	skin/classic/instantbird/smileys/wink.png              (smileys/wink.png)
-% skin messenger-messagestyles classic/1.0 %skin/classic/instantbird/messages/
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_0.png       (messages/bubbles/Bitmaps/indicator_0.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_0_alt.png   (messages/bubbles/Bitmaps/indicator_0_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_10.png      (messages/bubbles/Bitmaps/indicator_10.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_100.png     (messages/bubbles/Bitmaps/indicator_100.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_100_alt.png (messages/bubbles/Bitmaps/indicator_100_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_10_alt.png  (messages/bubbles/Bitmaps/indicator_10_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_110.png     (messages/bubbles/Bitmaps/indicator_110.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_110_alt.png (messages/bubbles/Bitmaps/indicator_110_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_120.png     (messages/bubbles/Bitmaps/indicator_120.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_120_alt.png (messages/bubbles/Bitmaps/indicator_120_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_130.png     (messages/bubbles/Bitmaps/indicator_130.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_130_alt.png (messages/bubbles/Bitmaps/indicator_130_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_140.png     (messages/bubbles/Bitmaps/indicator_140.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_140_alt.png (messages/bubbles/Bitmaps/indicator_140_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_150.png     (messages/bubbles/Bitmaps/indicator_150.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_150_alt.png (messages/bubbles/Bitmaps/indicator_150_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_160.png     (messages/bubbles/Bitmaps/indicator_160.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_160_alt.png (messages/bubbles/Bitmaps/indicator_160_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_170.png     (messages/bubbles/Bitmaps/indicator_170.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_170_alt.png (messages/bubbles/Bitmaps/indicator_170_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_180.png     (messages/bubbles/Bitmaps/indicator_180.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_180_alt.png (messages/bubbles/Bitmaps/indicator_180_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_190.png     (messages/bubbles/Bitmaps/indicator_190.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_190_alt.png (messages/bubbles/Bitmaps/indicator_190_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_20.png      (messages/bubbles/Bitmaps/indicator_20.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_200.png     (messages/bubbles/Bitmaps/indicator_200.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_200_alt.png (messages/bubbles/Bitmaps/indicator_200_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_20_alt.png  (messages/bubbles/Bitmaps/indicator_20_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_210.png     (messages/bubbles/Bitmaps/indicator_210.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_210_alt.png (messages/bubbles/Bitmaps/indicator_210_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_220.png     (messages/bubbles/Bitmaps/indicator_220.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_220_alt.png (messages/bubbles/Bitmaps/indicator_220_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_230.png     (messages/bubbles/Bitmaps/indicator_230.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_230_alt.png (messages/bubbles/Bitmaps/indicator_230_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_240.png     (messages/bubbles/Bitmaps/indicator_240.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_240_alt.png (messages/bubbles/Bitmaps/indicator_240_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_250.png     (messages/bubbles/Bitmaps/indicator_250.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_250_alt.png (messages/bubbles/Bitmaps/indicator_250_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_260.png     (messages/bubbles/Bitmaps/indicator_260.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_260_alt.png (messages/bubbles/Bitmaps/indicator_260_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_270.png     (messages/bubbles/Bitmaps/indicator_270.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_270_alt.png (messages/bubbles/Bitmaps/indicator_270_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_280.png     (messages/bubbles/Bitmaps/indicator_280.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_280_alt.png (messages/bubbles/Bitmaps/indicator_280_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_290.png     (messages/bubbles/Bitmaps/indicator_290.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_290_alt.png (messages/bubbles/Bitmaps/indicator_290_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_30.png      (messages/bubbles/Bitmaps/indicator_30.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_300.png     (messages/bubbles/Bitmaps/indicator_300.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_300_alt.png (messages/bubbles/Bitmaps/indicator_300_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_30_alt.png  (messages/bubbles/Bitmaps/indicator_30_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_310.png     (messages/bubbles/Bitmaps/indicator_310.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_310_alt.png (messages/bubbles/Bitmaps/indicator_310_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_320.png     (messages/bubbles/Bitmaps/indicator_320.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_320_alt.png (messages/bubbles/Bitmaps/indicator_320_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_330.png     (messages/bubbles/Bitmaps/indicator_330.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_330_alt.png (messages/bubbles/Bitmaps/indicator_330_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_340.png     (messages/bubbles/Bitmaps/indicator_340.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_340_alt.png (messages/bubbles/Bitmaps/indicator_340_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_350.png     (messages/bubbles/Bitmaps/indicator_350.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_350_alt.png (messages/bubbles/Bitmaps/indicator_350_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_40.png      (messages/bubbles/Bitmaps/indicator_40.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_40_alt.png  (messages/bubbles/Bitmaps/indicator_40_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_50.png      (messages/bubbles/Bitmaps/indicator_50.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_50_alt.png  (messages/bubbles/Bitmaps/indicator_50_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_60.png      (messages/bubbles/Bitmaps/indicator_60.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_60_alt.png  (messages/bubbles/Bitmaps/indicator_60_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_70.png      (messages/bubbles/Bitmaps/indicator_70.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_70_alt.png  (messages/bubbles/Bitmaps/indicator_70_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_80.png      (messages/bubbles/Bitmaps/indicator_80.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_80_alt.png  (messages/bubbles/Bitmaps/indicator_80_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_90.png      (messages/bubbles/Bitmaps/indicator_90.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_90_alt.png  (messages/bubbles/Bitmaps/indicator_90_alt.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/indicator_grey.png    (messages/bubbles/Bitmaps/indicator_grey.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/minus-hover.png       (messages/bubbles/Bitmaps/minus-hover.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/minus.png             (messages/bubbles/Bitmaps/minus.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/plus-hover.png        (messages/bubbles/Bitmaps/plus-hover.png)
-	skin/classic/instantbird/messages/bubbles/Bitmaps/plus.png              (messages/bubbles/Bitmaps/plus.png)
-	skin/classic/instantbird/messages/bubbles/Footer.html                   (messages/bubbles/Footer.html)
-	skin/classic/instantbird/messages/bubbles/Incoming/Content.html         (messages/bubbles/Incoming/Content.html)
-	skin/classic/instantbird/messages/bubbles/Incoming/Context.html         (messages/bubbles/Incoming/Context.html)
-	skin/classic/instantbird/messages/bubbles/Incoming/NextContent.html     (messages/bubbles/Incoming/NextContent.html)
-	skin/classic/instantbird/messages/bubbles/Info.plist                    (messages/bubbles/Info.plist)
-	skin/classic/instantbird/messages/bubbles/main.css                      (messages/bubbles/main.css)
-	skin/classic/instantbird/messages/bubbles/NextStatus.html               (messages/bubbles/NextStatus.html)
-	skin/classic/instantbird/messages/bubbles/Status.html                   (messages/bubbles/Status.html)
-	skin/classic/instantbird/messages/bubbles/Variants/Blue_-_Green_Alternating.css   (messages/bubbles/Variants/Blue_-_Green_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Blue_-_Green.css               (messages/bubbles/Variants/Blue_-_Green.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Blue_-_Pink_Alternating.css    (messages/bubbles/Variants/Blue_-_Pink_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Blue_-_Pink.css                (messages/bubbles/Variants/Blue_-_Pink.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Blue_-_Red_Alternating.css     (messages/bubbles/Variants/Blue_-_Red_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Blue_-_Red.css                 (messages/bubbles/Variants/Blue_-_Red.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Green_-_Blue_Alternating.css   (messages/bubbles/Variants/Green_-_Blue_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Green_-_Blue.css               (messages/bubbles/Variants/Green_-_Blue.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Green_-_Purple_Alternating.css (messages/bubbles/Variants/Green_-_Purple_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Green_-_Purple.css             (messages/bubbles/Variants/Green_-_Purple.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Green_-_Red_Alternating.css    (messages/bubbles/Variants/Green_-_Red_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Green_-_Red.css                (messages/bubbles/Variants/Green_-_Red.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Blue_Alternating.css   (messages/bubbles/Variants/Grey_-_Blue_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Blue.css               (messages/bubbles/Variants/Grey_-_Blue.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Pink_Alternating.css   (messages/bubbles/Variants/Grey_-_Pink_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Ping.css               (messages/bubbles/Variants/Grey_-_Pink.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Purple_Alternating.css (messages/bubbles/Variants/Grey_-_Purple_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Purple.css             (messages/bubbles/Variants/Grey_-_Purple.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Red_Alternating.css    (messages/bubbles/Variants/Grey_-_Red_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Grey_-_Red.css                (messages/bubbles/Variants/Grey_-_Red.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Pink_-_Blue_Alternating.css    (messages/bubbles/Variants/Pink_-_Blue_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Pink_-_Blue.css                (messages/bubbles/Variants/Pink_-_Blue.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Pink_-_Purple_Alternating.css  (messages/bubbles/Variants/Pink_-_Purple_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Pink_-_Purple.css              (messages/bubbles/Variants/Pink_-_Purple.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Purple_-_Green_Alternating.css (messages/bubbles/Variants/Purple_-_Green_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Purple_-_Green.css             (messages/bubbles/Variants/Purple_-_Green.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Purple_-_Pink_Alternating.css  (messages/bubbles/Variants/Purple_-_Pink_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Purple_-_Pink.css              (messages/bubbles/Variants/Purple_-_Pink.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Red_-_Blue_Alternating.css     (messages/bubbles/Variants/Red_-_Blue_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Red_-_Blue.css                 (messages/bubbles/Variants/Red_-_Blue.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Red_-_Green_Alternating.css    (messages/bubbles/Variants/Red_-_Green_Alternating.css)
-	skin/classic/instantbird/messages/bubbles/Variants/Red_-_Green.css                (messages/bubbles/Variants/Red_-_Green.css)
-	skin/classic/instantbird/messages/dark/Footer.html               (messages/dark/Footer.html)
-	skin/classic/instantbird/messages/dark/Incoming/Content.html     (messages/dark/Incoming/Content.html)
-	skin/classic/instantbird/messages/dark/Incoming/Context.html     (messages/dark/Incoming/Context.html)
-	skin/classic/instantbird/messages/dark/Incoming/NextContent.html (messages/dark/Incoming/NextContent.html)
-	skin/classic/instantbird/messages/dark/Incoming/NextContext.html (messages/dark/Incoming/NextContext.html)
-	skin/classic/instantbird/messages/dark/Info.plist                (messages/dark/Info.plist)
-	skin/classic/instantbird/messages/dark/main.css                  (messages/dark/main.css)
-	skin/classic/instantbird/messages/dark/Status.html               (messages/dark/Status.html)
-	skin/classic/instantbird/messages/dark/Variants/Blue.css         (messages/dark/Variants/Blue.css)
-	skin/classic/instantbird/messages/dark/Variants/Green.css        (messages/dark/Variants/Green.css)
-	skin/classic/instantbird/messages/dark/Variants/Purple.css       (messages/dark/Variants/Purple.css)
-	skin/classic/instantbird/messages/dark/Variants/Red.css          (messages/dark/Variants/Red.css)
-	skin/classic/instantbird/messages/dark/Variants/Yellow.css       (messages/dark/Variants/Yellow.css)
-	skin/classic/instantbird/messages/papersheets/Bitmaps/information.png   (messages/papersheets/Bitmaps/information.png)
-	skin/classic/instantbird/messages/papersheets/Bitmaps/minus.png         (messages/papersheets/Bitmaps/minus.png)
-	skin/classic/instantbird/messages/papersheets/Bitmaps/plus.png          (messages/papersheets/Bitmaps/plus.png)
-	skin/classic/instantbird/messages/papersheets/Footer.html               (messages/papersheets/Footer.html)
-	skin/classic/instantbird/messages/papersheets/Incoming/Content.html     (messages/papersheets/Incoming/Content.html)
-	skin/classic/instantbird/messages/papersheets/Incoming/Context.html     (messages/papersheets/Incoming/Context.html)
-	skin/classic/instantbird/messages/papersheets/Incoming/NextContent.html (messages/papersheets/Incoming/NextContent.html)
-	skin/classic/instantbird/messages/papersheets/Info.plist                (messages/papersheets/Info.plist)
-	skin/classic/instantbird/messages/papersheets/main.css                  (messages/papersheets/main.css)
-	skin/classic/instantbird/messages/papersheets/NextStatus.html           (messages/papersheets/NextStatus.html)
-	skin/classic/instantbird/messages/papersheets/Status.html               (messages/papersheets/Status.html)
-	skin/classic/instantbird/messages/papersheets/Variants/White.css        (messages/papersheets/Variants/White.css)
-	skin/classic/instantbird/messages/simple/Incoming/Content.html (messages/simple/Incoming/Content.html)
-	skin/classic/instantbird/messages/simple/Incoming/Context.html (messages/simple/Incoming/Context.html)
-	skin/classic/instantbird/messages/simple/Incoming/NextContext.html (messages/simple/Incoming/NextContext.html)
-	skin/classic/instantbird/messages/simple/Info.plist            (messages/simple/Info.plist)
-	skin/classic/instantbird/messages/simple/main.css              (messages/simple/main.css)
-	skin/classic/instantbird/messages/simple/Status.html           (messages/simple/Status.html)
-	skin/classic/instantbird/messages/simple/Variants/Normal.css   (messages/simple/Variants/Normal.css)
-	skin/classic/instantbird/messages/simple/Variants/Dark.css     (messages/simple/Variants/Dark.css)
-
-#ifdef XP_UNIX
-#ifdef XP_MACOSX
-% override chrome://instantbird/skin/tabbrowser/alltabs-box-bkgnd-icon.png     chrome://instantbird/skin/lion/tabbrowser/alltabs-box-bkgnd-icon.png        os=Darwin osversion>=10.7
-#else
-% override chrome://global/skin/icons/close.png  chrome://global/skin/icons/close.svg
-#endif
-#endif
deleted file mode 100644
--- a/im/themes/menulist.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-/* Fix the icons in the menulist by undoing things from menu.css */
-menulist > menupopup > menuitem.menuitem-iconic > .menu-iconic-left {
-  display: -moz-box !important;
-}
-
-menulist > menupopup > menuitem.menuitem-iconic > .menu-iconic-text {
-  margin-left: 2px !important;
-}
deleted file mode 100644
--- a/im/themes/menus.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#statusAvailable {
-  list-style-image: url('chrome://chat/skin/available-16.png');
-}
-
-#statusUnavailable {
-  list-style-image: url('chrome://chat/skin/away-16.png');
-}
-
-#statusOffline {
-  list-style-image: url('chrome://chat/skin/offline-16.png');
-}
deleted file mode 100644
index eb0051de3414dddedc07ff5597a1b79cb7af949f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9c5890b792b7265e6fb017ce25a14bb28e341f42..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 17295f54740b8f9707a88985a94bbfff53e922ed..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fc54959c86851ae86a9495a66398af4a307b3241..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 218351534b0827836816390fbf880251d813247e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4692e1cf9227afe2705e364e09f7cf4bd97b7ba0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bbd8c91b10fe809a704666f53f8ff61bb42e98d4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index be6c4b2b086aaed21075acc5a4eb4a4569f412d9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index de40ea9eba0e2b29d13c71cb04d26f512df9e01e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d95237d37cf86180c99639dfed6f9008366f384e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d6360fb7bdc1714706ac3dc5df435f2c68cdb3ae..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5c10415912a6a17880127256976a9abc1c652f2b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2bc8b95efaaee34e404b9e437944e0a8f51c613f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a0d8e59ce9f51cc95f5d3592d6af045257bf0b42..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 572333b2f60823b12721150eaf5f989e3138d9d7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f1e1740e9160fa00f36e771eb1f41c0114a49cff..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f2ff22beae2ce8a0de8c39b163340bb274be0782..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ba4118844e38672bde7fbd285c1676acc1a156e8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 391439be423dc612ce8252c53749cf0e30281ff1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b3b26830909a9fe70d96c90fc3e8f8e806457be4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b59ffae9b607033b159e065336273e5702a25f83..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1a08183e18701b5ae0f07544bf1eb95b618f297a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8df7a9d5694006ad1493779552488ac7cb9bf270..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 327ed9be66446dac004726a7a00ee5af8dc5f6ba..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f5b2d08f2a4850f316ca26df41e609ae8cdd088c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fd5baf149f867521e6f6a29b1bff3d52c7eb1eb0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a03b2d7a29bbfd209b8265062b0151bcb844016b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2dbb2241a283fb1809031dc8727f9053d20675fd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8505ef0de81a18fe40f0513790fbca07f68009e0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 18e3fac3af3db7758a50aecf80fdf9f7bc48bba5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 02f82c3972be308b05732ec590492a8e410463bf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d14afacf6daf84ed6dcc1784ff51d2b8568a8dae..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f9fb364e287276578bbd559dbf8d7ca78aefb452..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 13388613e5cd11e6f0d9906ca7570652ac2b8258..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8bb87578713d8e2eed78c35a97196aa5e17b806e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bd70b8d77ad0fdd290b50a7aea3d75657f172268..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b55967823f159553d2e5bda079489903ce01e437..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2b239c315b1f156bd468c79f02e57bab50c4cf80..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f9c0cee4fe470027cd4d6caa783b13d288248c42..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 56839321e2025054e80e51111d8cda4321cca5c8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cec2e2817ef07913b35e59d53bfb92fceeb2c559..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ffcbe04eb8e731561160c6b43cb6119d11bfd450..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a2e01b5dfaa2fafc5208761016834bfb0e6c9cb4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6cf6949f7873a8d60e420402db98c2b7fd22347b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b4acbf86314736d0c50b6580686fbf5001921be3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0652f280ef143e88e64fae4c31819876f30dae13..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 86b9ea020678fddbd46b39dabab4b231b9ea49b6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 36788859bf416ca418bcdf486a835906f88ad505..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 45e61fccb022dbe93cae0f03991233ffc4e724ab..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index efd75314fae68a605c9abc8de0b2473f6d1fe9e6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 69f590d9671aba72624f95528d7a5f2ba6d2f24e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 77a24693992ebb64f16ca148d6ab15062831e35b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9ad18a0deace80b6a89300153172d214c7a861f5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0e7a2e35c00a17a693c1f8647a11ca85a33575a3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 516e309aec87d5304e9af2cd189277cfe11a721c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9981a248144b5ec53049739fe1a85833d03f6951..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 60cc155e032235c84fc11e64a2e4a746df9f4e81..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cb2860cf66f93bc90b667f5945e47ddc92e38f47..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cc5a303a7567ac7b58d29fe4a78855be73df15eb..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dd0ef8da8a99af443d88a75dcb7bd872928239bf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 15f010224ba2bbe318a0018fdb7530a77ccbedc2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8d40d43293be7cbd9e2fc4fce857c1f0bb37fc42..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 72817605718779cfb4197c3c68576d47069fd8a7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bb4cc9044e7e306e73d8c09a5916bf08cd240a76..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f7d05aae55a3393eede84cdf2751885e0fe9aa3a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a939ea98b9ac95e396676984192f39029af30ce9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 823cd4f2b0868fd4e511c659e32556630d56804c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 85b1781135df7f1a90b2abaddbd3fa9b7d4167be..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0cbff3ee35a57184b3029cf17475a39e895da6a3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e51a56935cb40256bee27e88ac569395403aa882..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 758a8f95e38e637827ec5027e7f383454bba85b6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5e41f98397fa5593ef01fc0a9c408965e9eea201..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b3c8e68ebac2e010fa59c10c76f41f140de7949a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 93a69cc789aeeba65a66e31418160bbbc9bef692..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 72107d151f97907425c33874e16c7f2ac0c99e0b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4509b17c0e9d2bf70c6dff3f17386d721eabb493..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index eaf364177d64f34204a1578c151dc027b68ce72d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/messages/bubbles/Footer.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<script type="application/javascript">
-/* [pseudo_color, pseudo_background, bubble_borders] */
-const elements_lightness = [[75, 94, 80], [75, 94, 80], [70, 93, 75], [65, 92, 70], [55, 90, 65], [48, 90, 60], [44, 86, 50], [44, 88, 60], [45, 88, 70], [45, 90, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [45, 92, 70], [60, 92, 70], [70, 93, 75], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80], [75, 94, 80]];
-
-const bubble_background = "hsl(#, 100%, 97%)";
-const bubble_borders = "hsl(#, 100%, #%)";
-const pseudo_color = "hsl(#, 100%, #%)";
-const pseudo_background = "hsl(#, 100%, #%)";
-
-var alternating = null;
-
-function setColors(target)
-{
-  var senderColor = target.getAttribute("senderColor");
-
-  if (!senderColor)
-    return;
-
-  var regexp = /color:\s*hsl\(\s*(\d{1,3})\s*,\s*\d{1,3}\%\s*,\s*\d{1,3}\%\s*\)/;
-  var parsed = regexp.exec(senderColor);
-
-  if (!parsed)
-    return;
-
-  var senderHue = ((Math.round(parsed[1]/10))*10)%360;
-  var lightness = elements_lightness[senderHue/10];
-
-  target.style.backgroundColor = bubble_background.replace("#", senderHue);
-  target.style.borderColor = bubble_borders.replace("#", senderHue)
-                                           .replace("#", lightness[2]);
-
-  var pseudo = target.getElementsByClassName("pseudo")[0];
-  pseudo.style.color = pseudo_color.replace("#", senderHue)
-                                   .replace("#", lightness[0]);
-  pseudo.style.backgroundColor = pseudo_background.replace("#", senderHue)
-                                                  .replace("#", lightness[1]);
-
-  var div_indicator = target.getElementsByClassName("indicator")[0];
-  var imageURL = "url('Bitmaps/indicator_" + senderHue;
-  if (target.classList.contains("incoming")) {
-    // getComputedStyle is prohibitively expensive, and we need it only to
-    // know if we are using an alternating variant, so we cache the result.
-    if (alternating === null) {
-      alternating = document.defaultView.getComputedStyle(div_indicator, null)
-                            .backgroundImage.endsWith('_alt.png")') ? "_alt" : "";
-    }
-    imageURL += alternating;
-  }
-  div_indicator.style.backgroundImage = imageURL + ".png')";
-}
-
-
-function prettyPrintTime(aValue, aNoSeconds) {
-  if (aValue < 60 && aNoSeconds)
-    return "";
-
-  if (aNoSeconds)
-    aValue -= aValue % 60;
-
-  let valuesAndUnits = window.convertTimeUnits(aValue);
-  if (!valuesAndUnits[2])
-    valuesAndUnits.splice(2, 2);
-  return valuesAndUnits.join(" ");
-}
-
-// The "shadow" constant is the minimum acceptable margin-bottom for a bubble
-// with a shadow, and the minimum spacing between the bubbles of two messages
-// arriving in the same second. It should match the value of margin-bottom and
-// box-shadow-bottom for the "bubble" class.
-const shadow = 3;
-const coef = 3;
-const timebeforetextdisplay = 5 * 60;
-const kRulerMarginTop = 11;
-
-const kMsPerMinute = 60 * 1000;
-const kMsPerHour = 60 * kMsPerMinute;
-const kMsPerDay = 24 * kMsPerHour;
-
-function computeSpace(aInterval) {
-  return Math.round(coef * Math.log(aInterval + 1));
-}
-
-var lastMessageTimeout;
-var lastMessageTimeoutTime = -1;
-
-/* This function takes care of updating the amount of whitespace
- * between the last message and the bottom of the conversation area.
- * When the last message is more than timebeforetextdisplay old, we display
- * the time in text. To avoid blinking Mac scrollbar and visual distractions
- * for some very sensitive users, we update the whitespace only when a new
- * message is displayed or when the user switches between tabs. While the
- * conversation is visible, this function is called by timers, but we will
- * only update the time displayed in text (this behavior is obtained by
- * setting the aUpdateTextOnly parameter to true; otherwise it is omitted).
- */
-function handleLastMessage(aUpdateTextOnly)
-{
-  if (window.messageInsertPending)
-    return;
-
-  var intervalInMs = Date.now() - lastMsgTime * 1000;
-  var interval = Math.round(intervalInMs / 1000);
-  var p = document.getElementById("lastMessage");
-  var margin;
-  if (!aUpdateTextOnly) {
-    // Impose a minimum to ensure the last bubble doesn't touch the editbox.
-    margin = computeSpace(Math.max(intervalInMs, 5000) / 1000);
-  }
-  var text = "";
-  if (interval >= timebeforetextdisplay) {
-    if (!aUpdateTextOnly)
-      p.style.lineHeight = (margin + shadow) + "px";
-    p.setAttribute("class", "interval");
-    text = prettyPrintTime(interval, true);
-    margin = 0;
-  }
-  p.textContent = text;
-  if (!aUpdateTextOnly) {
-    p.style.marginTop = (margin - shadow) + "px";
-    if (autoScrollEnabled())
-      scrollToElement(p);
-  }
-
-  var next = timebeforetextdisplay * 1000 - intervalInMs;
-  if (next <= 0) {
-    if (intervalInMs > kMsPerDay)
-      next = kMsPerHour - intervalInMs % kMsPerHour;
-    else
-      next = kMsPerMinute - intervalInMs % kMsPerMinute;
-    aUpdateTextOnly = true;
-  }
-
-  // The setTimeout callbacks are frequently called a few ms early,
-  // but our code prefers being called a little late, so add 20ms.
-  lastMessageTimeoutTime = next + 20;
-  lastMessageTimeout =
-    setTimeout(handleLastMessage, lastMessageTimeoutTime, aUpdateTextOnly);
-}
-
-var lastMsgTime = 0;
-function updateLastMsgTime(aMsgTime)
-{
-  if (aMsgTime > lastMsgTime)
-    lastMsgTime = aMsgTime;
-
-  if (lastMsgTime && lastMessageTimeoutTime != 0 && !document.hidden) {
-    clearTimeout(lastMessageTimeout);
-    setTimeout(handleLastMessage, 0);
-    lastMessageTimeoutTime = 0;
-  }
-}
-
-function visibilityChanged()
-{
-  if (document.hidden) {
-    clearTimeout(lastMessageTimeout);
-    lastMessageTimeoutTime = -1;
-  }
-  else if (lastMsgTime)
-    handleLastMessage();
-}
-
-function checkNewText(target)
-{
-  var nicks = target.getElementsByClassName("ib-nick");
-  for (var i = 0; i < nicks.length; ++i) {
-    var nick = nicks[i];
-    if (nick.hasAttribute("left"))
-      continue;
-    var hue = nick.getAttribute("nickColor");
-    var senderHue = ((Math.round(hue / 10)) * 10) % 360;
-    var lightness = elements_lightness[senderHue / 10];
-    nick.style.backgroundColor = pseudo_background.replace("#", senderHue).replace("#", lightness[1]);
-    nick.style.color = pseudo_color.replace("#", senderHue).replace("#", lightness[0]);
-    nick.style.borderColor = bubble_borders.replace("#", senderHue).replace("#", lightness[2]);
-  }
-
-  var msgTime = null;
-  if (target._originalMsg)
-    msgTime = target._originalMsg.time;
-  if (target.tagName == "DIV" && target.classList.contains("bubble")) {
-    setColors(target);
-
-    var prev = target.previousSibling;
-    var shouldSetUnreadRuler = prev && prev.id && prev.id == "unread-ruler";
-    var shouldSetSessionRuler = prev && prev.className && prev.className == "sessionstart-ruler";
-    // We need an extra pixel of margin at the top to make the margins appear
-    // to be of equal size, since the preceding bubble will have a shadow.
-    var rulerMarginBottom = kRulerMarginTop - 1;
-
-    if (lastMsgTime && msgTime >= lastMsgTime) {
-      var interval = msgTime - lastMsgTime;
-      var margin = computeSpace(interval);
-      let isTimetext = interval >= timebeforetextdisplay;
-      if (isTimetext) {
-        var p = document.createElement("p");
-        p.className = "interval";
-        if (shouldSetSessionRuler) {
-          // Hide the hr and style the time text accordingly instead.
-          prev.classList.remove("sessionstart-ruler");
-          prev.style.border = "none";
-          p.classList.add("sessionstart-ruler");
-          margin += 6;
-          prev = p;
-        }
-        p.style.lineHeight = (margin + shadow) + "px";
-        p.style.marginTop = -shadow + "px";
-        p.textContent = prettyPrintTime(interval);
-        target.parentNode.insertBefore(p, target);
-        margin = 0;
-      }
-      target.style.marginTop = margin + "px";
-      if (shouldSetUnreadRuler || shouldSetSessionRuler) {
-        if (margin > rulerMarginBottom) {
-          // Set the unread ruler margin so it is constant after margin collapse.
-          // See https://developer.mozilla.org/en/CSS/margin_collapsing
-          rulerMarginBottom -= margin;
-        }
-        if (isTimetext && shouldSetUnreadRuler) {
-          // If a text display follows, use the minimum bubble margin after the
-          // ruler, taking account of the absence of a shadow on the ruler.
-          rulerMarginBottom = shadow - 1;
-        }
-      }
-    }
-    if (shouldSetUnreadRuler || shouldSetSessionRuler) {
-      prev.style.marginBottom = rulerMarginBottom + "px";
-      prev.style.marginTop = kRulerMarginTop + "px";
-    }
-  }
-  else if (target.tagName == "P" && target.className == "event") {
-    let parent = target.parentNode;
-    // We need to start a group with this element if there are at least 4
-    // system messages and they aren't already grouped.
-    if (!parent.grouped && parent.querySelector("p.event:nth-of-type(4)")) {
-      var p = document.createElement("p");
-      p.className = "eventToggle";
-      p.addEventListener("click", event =>
-        event.target.parentNode.classList.toggle("hide-children"));
-      parent.insertBefore(p, parent.querySelector("p.event:nth-of-type(2)"));
-      parent.classList.add("hide-children");
-      parent.grouped = true;
-    }
-  }
-
-  if (msgTime)
-    updateLastMsgTime(msgTime);
-}
-
-new MutationObserver(function(aMutations) {
-  for (let mutation of aMutations)
-    for (let node of mutation.addedNodes)
-      if (node instanceof HTMLElement)
-        checkNewText(node);
-}).observe(document.getElementById("ibcontent"),
-           {childList: true, subtree: true});
-
-document.addEventListener("visibilitychange", visibilityChanged);
-</script>
-
-<p id="lastMessage"/>
deleted file mode 100644
--- a/im/themes/messages/bubbles/Incoming/Content.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="bubble %messageClasses%" senderColor="%senderColor%">
-<div class="indicator">
-<p class="pseudo">%sender%<span class="time"> - %time{%H:%M}%</span></p>
-<p class="%messageClasses%">%message%</p>
-<div id="insert"></div>
-</div>
-</div>
deleted file mode 100644
--- a/im/themes/messages/bubbles/Incoming/Context.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="bubble context %messageClasses%" senderColor="%senderColor%">
-<div class="indicator">
-<p class="pseudo">%sender%<span class="time"> - %time{%H:%M}%</span></p>
-<p class="%messageClasses%">%message%</p>
-<div id="insert"></div>
-</div>
-</div>
deleted file mode 100644
--- a/im/themes/messages/bubbles/Incoming/NextContent.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<hr/>
-<p class="%messageClasses%">%message%</p>
-<div id="insert"></div>
deleted file mode 100644
--- a/im/themes/messages/bubbles/Info.plist
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>ActionMessageTemplate</key>
-  <string>%sender% %message%</string>
-  
-  <key>CFBundleDevelopmentRegion</key>
-  <string>English</string>
-  
-  <key>CFBundleGetInfoString</key>
-  <string>Instantbird Bubbles Message Style</string>
-  
-  <key>CFBundleIdentifier</key>
-  <string>org.instantbird.bubbles.message.style</string>
-  
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>1.0</string>
-  
-  <key>CFBundleName</key>
-  <string>Bubbles</string>
-  
-  <key>CFBundlePackageType</key>
-  <string>AdIM</string>
-  
-  <key>DefaultBackgroundColor</key>
-  <string>FFFFFF</string>
-  
-  <key>DefaultVariant</key>
-  <string>Blue_-_Red_Alternating</string>
-  
-  <key>DisableCustomBackground</key>
-  <false/>
-  
-  <key>MessageViewVersion</key>
-  <integer>4</integer>
-  
-  <key>ShowsUserIcons</key>
-  <true/>
-</dict>
-</plist>
deleted file mode 100644
--- a/im/themes/messages/bubbles/NextStatus.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<hr/>
-<p class="%messageClasses%">%time% - %message%</p>
-<div id="insert"></div>
deleted file mode 100644
--- a/im/themes/messages/bubbles/Status.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="bubble %messageClasses%">
-<p class="%messageClasses%">%time% - %message%</p>
-<div id="insert"></div>
-</div>
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Blue_-_Green.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Blue_-_Green_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_120_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Blue_-_Pink.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Blue_-_Pink_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_320_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Blue_-_Red.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Blue_-_Red_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_0_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Green_-_Blue.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Green_-_Blue_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_240_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Green_-_Purple.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Green_-_Purple_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_270_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Green_-_Red.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Green_-_Red_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_0_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Blue.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Blue_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_240_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Pink.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Pink_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_320_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Purple.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Purple_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_270_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Red.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Grey_-_Red_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(240, 20%, 97%);
-  border-color: hsl(240, 20%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(240, 20%, 75%);
-  background-color: hsl(240, 20%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_grey.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_0_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Pink_-_Blue.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Pink_-_Blue_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_240_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Pink_-_Purple.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Pink_-_Purple_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_270_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Purple_-_Green.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Purple_-_Green_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_120_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Purple_-_Pink.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_320.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Purple_-_Pink_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(270, 100%, 97%);
-  border-color: hsl(270, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(270, 100%, 75%);
-  background-color: hsl(270, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_270.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(320, 100%, 97%);
-  border-color: hsl(320, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(320, 100%, 75%);
-  background-color: hsl(320, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_320_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Red_-_Blue.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_240.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Red_-_Blue_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(240, 100%, 97%);
-  border-color: hsl(240, 100%, 80%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(240, 100%, 75%);
-  background-color: hsl(240, 100%, 94%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_240_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Red_-_Green.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.incoming > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_120.png') no-repeat center left;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/Variants/Red_-_Green_Alternating.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.bubble.outgoing {
-  background-color: hsl(0, 100%, 97%);
-  border-color: hsl(0, 100%, 80%);
-}
-
-.outgoing > .indicator > .pseudo {
-  color: hsl(0, 100%, 75%);
-  background-color: hsl(0, 100%, 94%);
-}
-
-.outgoing > .indicator {
-  margin-left: -17px;
-  padding-left: 32px;
-  background: url('../Bitmaps/indicator_0.png') no-repeat center left;
-}
-
-
-.bubble.incoming {
-  background-color: hsl(120, 100%, 97%);
-  border-color: hsl(120, 100%, 70%);
-}
-
-.incoming > .indicator > .pseudo {
-  color: hsl(120, 100%, 45%);
-  background-color: hsl(120, 100%, 92%);
-}
-
-.incoming > .indicator {
-  margin-right: -19px;
-  padding-right: 34px;
-  background: url('../Bitmaps/indicator_120_alt.png') no-repeat center right;
-}
deleted file mode 100644
--- a/im/themes/messages/bubbles/main.css
+++ /dev/null
@@ -1,193 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-body {
-  margin: 0;
-  padding: 0;
-  background: -moz-linear-gradient(top, -moz-dialog, -moz-default-background-color) fixed;
-}
-
-p {
-  font-family: sans-serif;
-  margin: 0;
-  padding: 0;
-}
-
-.bubble {
-  margin: 20px 20px 3px;
-  padding: 0;
-  border-width: 2px;
-  border-style: solid;
-  border-radius: 10px;
-  box-shadow: rgba(0, 0, 0, 0.3) 1px 1px 3px;
-}
-
-#ibcontent:not(.log) > #Chat > .bubble:not(.context):not(.event) {
-  -moz-animation-duration: 0.5s;
-  -moz-animation-name: fadein;
-  -moz-animation-iteration-count: 1;
-}
-
-@-moz-keyframes fadein {
-  from {
-    opacity: 0;
-  }
-
-  to {
-    opacity: 1.0;
-  }
-}
-
-.bubble.context:not(:hover) {
-  filter: saturate(40%);
-}
-
-.indicator {
-  margin: 0;
-  padding: 9px 15px 10px 15px;
-}
-
-.bubble.event {
-  padding: 4px 15px 4px 15px;
-  background-color: hsl(0, 0%, 99%);
-  border-color: hsl(0, 0%, 85%);
-  box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 3px;
-}
-
-.pseudo {
-  display: inline-block;
-  font-size: smaller;
-  font-weight: bold;
-  margin: -9px 0px 3px -15px;
-  padding: 0px 15px 1px 15px;
-  /* border-top-left-radius = (border-radius - border-width) of div.bubble,
-     see bug 1775 for an explanation */
-  border-top-left-radius: 8px;
-  border-bottom-right-radius: 10px;
-}
-
-.pseudo > .time {
-  display: none;
-}
-
-.bubble:hover > .indicator > .pseudo > .time {
-  display: inline;
-}
-
-.bubble > .indicator > hr,
-.bubble > hr {
-  margin: 3px 0px 1px 0px;
-  height: 2px;
-  border-style: none;
-  border-top: 1px solid rgba(0, 0, 0, 0.07);
-  border-bottom: 1px solid rgba(255, 255, 255, 0.5);
-}
-
-.interval, #lastMessage {
-  text-align: center;
-  color: hsl(0, 0%, 60%);
-}
-
-#lastMessage {
-  line-height: 20px;
-}
-
-#ibcontent.log > #lastMessage {
-  display: none;
-}
-
-p.nick {
-  font-weight: bold;
-}
-
-p.action {
-  font-style: italic;
-}
-
-p.action:before {
-  content: "*** ";
-}
-
-p.event {
-  color: hsl(0, 0%, 60%);
-}
-
-p.event *:any-link:not(:hover) {
-  color: hsl(0, 0%, 60%);
-  text-decoration: none;
-}
-
-p.event *:any-link:hover {
-  color: hsl(0, 0%, 25%);
-}
-
-#Chat {
-  white-space: normal;
-}
-
-p *:any-link img {
-  margin-bottom: 1px;
-  border-bottom: solid 1px;
-}
-
-#unread-ruler {
-  border-top: 1px solid rgba(0, 0, 0, 0.16) !important;
-  border-bottom: 1px solid rgb(255,255,255) !important;
-}
-
-.sessionstart-ruler {
-  margin: 0;
-  width: 100%;
-  border: none;
-  min-height: 13px;
-  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(0,0,0,0.18));
-}
-
-
-/* used by javascript */
-.eventToggle {
-  cursor: pointer;
-  min-height: 20px;
-  margin-left: -24px;
-  padding-left: 24px;
-  background: url('Bitmaps/minus.png') no-repeat left top;
-  margin-bottom: -20px;
-  width: 0;
-}
-
-.eventToggle:hover {
-  background-image: url('Bitmaps/minus-hover.png');
-}
-
-.hide-children > .eventToggle {
-  width: 100%;
-  margin-bottom: -3px;
-  background-image: url('Bitmaps/plus.png');
-}
-
-.hide-children > .eventToggle:hover {
-  background-image: url('Bitmaps/plus-hover.png');
-}
-
-.hide-children > .eventToggle:after {
-  content: "\2026"; /* &hellip; */
-  color: hsl(0, 0%, 60%);
-}
-
-.hide-children > :-moz-any(p.event, hr):not(:first-of-type):not(:last-of-type) {
-  display: none;
-}
-
-.ib-nick {
-  font-size: smaller;
-  border: 1px solid;
-  border-radius: 6px;
-  padding: 0 0.3em;
-}
-
-.ib-nick[left] {
-  color: hsl(0, 0%, 60%);
-  background-color: hsl(0, 0%, 99%);
-  border-color: hsl(0, 0%, 85%);
-}
deleted file mode 100644
--- a/im/themes/messages/dark/Footer.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<script type="application/javascript">
-const p_border_top = "1px solid hsla(#, 100%, 80%, 0.4)";
-const p_background = "-moz-linear-gradient(top, hsla(#, 100%, 80%, 0.3), hsla(#, 100%, 80%, 0.1) 30px)";
-const nick_background = "-moz-linear-gradient(top, hsla(#, 100%, 80%, 0.3), hsla(#, 100%, 80%, 0.1) 1em)";
-
-function setColors(target)
-{
-  var senderColor = target.getAttribute("senderColor");
-
-  if (!senderColor)
-    return;
-
-  var regexp = /color:\s*hsl\(\s*(\d{1,3})\s*,\s*\d{1,3}\%\s*,\s*\d{1,3}\%\s*\)/;
-  var parsed = regexp.exec(senderColor);
-
-  if (!parsed)
-    return;
-
-  var senderHue = parsed[1];
-
-  target.style.borderTop = p_border_top.replace("#", senderHue);
-  target.style.background = p_background.replace(/#/g, senderHue);
-}
-
-function checkNewText(target)
-{
-  if (target.tagName == "P" && target.className != "event-messages")
-    setColors(target);
-
-  var nicks = target.getElementsByClassName("ib-nick");
-  for (var i = 0; i < nicks.length; ++i) {
-    var nick = nicks[i];
-    if (!nick.hasAttribute("left"))
-      nick.style.background = nick_background.replace(/#/g, nick.getAttribute("nickColor"));
-  }
-}
-
-new MutationObserver(function(aMutations) {
-  for (let mutation of aMutations)
-    for (let node of mutation.addedNodes)
-      if (node instanceof HTMLElement)
-        checkNewText(node);
-}).observe(document.getElementById("ibcontent"),
-           {childList: true, subtree: true});
-</script>
deleted file mode 100644
--- a/im/themes/messages/dark/Incoming/Content.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p class="%messageClasses%" senderColor="%senderColor%"><span class="pseudo">%sender%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
deleted file mode 100644
--- a/im/themes/messages/dark/Incoming/Context.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p class="context %messageClasses%" senderColor="%senderColor%"><span class="pseudo">%sender%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
deleted file mode 100644
--- a/im/themes/messages/dark/Incoming/NextContent.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p class="%messageClasses%" senderColor="%senderColor%"><span class="message-style">%message%</span></p>
-<div id="insert"/>
deleted file mode 100644
--- a/im/themes/messages/dark/Incoming/NextContext.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p class="context %messageClasses%" senderColor="%senderColor%"><span class="message-style">%message%</span></p>
-<div id="insert"/>
deleted file mode 100644
--- a/im/themes/messages/dark/Info.plist
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>ActionMessageTemplate</key>
-  <string>%sender% %message%</string>
-  
-  <key>CFBundleDevelopmentRegion</key>
-  <string>English</string>
-  
-  <key>CFBundleGetInfoString</key>
-  <string>Instantbird Dark Message Style</string>
-  
-  <key>CFBundleIdentifier</key>
-  <string>org.instantbird.dark.message.style</string>
-  
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>1.0</string>
-  
-  <key>CFBundleName</key>
-  <string>Dark</string>
-  
-  <key>CFBundlePackageType</key>
-  <string>AdIM</string>
-  
-  <key>DefaultBackgroundColor</key>
-  <string>000000</string>
-  
-  <key>DefaultVariant</key>
-  <string>Blue</string>
-  
-  <key>DisableCustomBackground</key>
-  <false/>
-  
-  <key>MessageViewVersion</key>
-  <integer>4</integer>
-  
-  <key>ShowsUserIcons</key>
-  <true/>
-</dict>
-</plist>
deleted file mode 100644
--- a/im/themes/messages/dark/Status.html
+++ /dev/null
@@ -1,1 +0,0 @@
-<p class="event-messages">%time% - %message%</p>
deleted file mode 100644
--- a/im/themes/messages/dark/Variants/Blue.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-p.incoming {
-  border-top: 1px solid hsla(215, 100%, 80%, 0.4);
-  background: -moz-linear-gradient(top, hsla(215, 100%, 80%, 0.3), hsla(215, 100%, 80%, 0.1) 30px);
-}
deleted file mode 100644
--- a/im/themes/messages/dark/Variants/Green.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-p.incoming {
-  border-top: 1px solid hsla(150, 80%, 80%, 0.4);
-  background: -moz-linear-gradient(top, hsla(150, 80%, 80%, 0.3), hsla(150, 80%, 80%, 0.1) 30px);
-}
deleted file mode 100644
--- a/im/themes/messages/dark/Variants/Purple.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-p.incoming {
-  border-top: 1px solid hsla(275, 100%, 80%, 0.4);
-  background: -moz-linear-gradient(top, hsla(275, 100%, 80%, 0.3), hsla(275, 100%, 80%, 0.1) 30px);
-}
deleted file mode 100644
--- a/im/themes/messages/dark/Variants/Red.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-p.incoming {
-  border-top: 1px solid hsla(0, 100%, 80%, 0.4);
-  background: -moz-linear-gradient(top, hsla(0, 100%, 80%, 0.3), hsla(0, 100%, 80%, 0.1) 30px);
-}
deleted file mode 100644
--- a/im/themes/messages/dark/Variants/Yellow.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-p.incoming {
-  border-top: 1px solid hsla(50, 100%, 80%, 0.4);
-  background: -moz-linear-gradient(top, hsla(50, 100%, 80%, 0.3), hsla(50, 100%, 80%, 0.1) 30px);
-}
deleted file mode 100644
--- a/im/themes/messages/dark/main.css
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-body {
-  margin: 0;
-  padding: 0;
-  background-color: black;
-}
-
-p {
-  font-family: sans-serif;
-  margin: 0;
-  padding: 0;
-  color: rgba(255, 255, 255, 0.6);
-}
-
-p.message {
-  margin: 0;
-  padding: 4px 15px 6px 15px;
-  border-bottom: 1px solid black;
-  border-top: 1px solid rgba(255, 255, 255, 0.3);
-  background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.07) 30px);
-}
-
-p.context:not(:hover) {
-  opacity: 0.5;
-  color: rgba(255, 255, 255, 1);
-}
-
-span.message-style,
-p.event-messages {
-  font-size: 90%;
-}
-
-p.event-messages {
-  margin: 5px 0px 5px 0px;
-  text-align: center;
-  opacity: 0.4;
-  -moz-transition-property: opacity;
-  -moz-transition-duration: 0.3s;
-}
-
-p.event-messages:hover {
-  opacity: 1;
-}
-
-.message-style {
-  display: block;
-}
-
-.pseudo {
-  margin-bottom: 3px;
-  font-weight: bold;
-  color: white;
-  display: block;
-}
-
-.nick>.message-style {
-  font-weight: bold;
-}
-
-.action>.message-style {
-  font-style: italic;
-}
-
-.action>.message-style:before {
-  content: "*** ";
-}
-
-a,
-a:hover {
-  color: rgba(255, 255, 255, 0.6);
-}
-
-a:active {
-  color: rgba(255, 255, 255, 1);
-}
-
-a:visited {
-  color: rgba(255, 255, 255, 0.4);
-}
-
-#Chat {
-  white-space: normal;
-}
-
-p *:any-link img {
-  margin-bottom: 1px;
-  border-bottom: solid 1px;
-}
-
-.ib-nick {
-  color: white !important;
-  border-radius: 3px;
-  padding: 0 0.25em;
-}
-
-.ib-nick[left] {
-  color: white !important;
-  background-color: black;
-  opacity: 0.4;
-  -moz-transition-property: opacity;
-  -moz-transition-duration: 0.3s;
-}
-
-.ib-nick[left]:hover {
-  opacity: 1;
-}
deleted file mode 100644
index ff62c80758c8da4bc6f2415faa6de7e1937ac199..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f84a080807314698ae1d114118e877cb98f6758c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9f5e414f4443035ac4ded9f36575412eb6ca316f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/messages/papersheets/Footer.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<script type="application/javascript">
-
-const bg_gradient = "background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1) 15px, hsla(#, 100%, 98%, 1) 15px, hsla(#, 100%, 98%, 1));";
-const bg_context_gradient = "background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05) 15px, hsla(#, 20%, 98%, 1) 15px, hsla(#, 20%, 98%, 1));";
-const bg_color = "background-color: hsl(#, 100%, 98%);";
-
-var body = document.getElementById("ibcontent");
-
-
-function setColors(target)
-{
-  var senderColor = target.getAttribute("senderColor");
-
-  if (senderColor) {
-    var regexp = /color:\s*hsl\(\s*(\d{1,3})\s*,\s*\d{1,3}\%\s*,\s*\d{1,3}\%\s*\)/;
-    var parsed = regexp.exec(senderColor);
-
-    if (parsed) {
-      var senderHue = parsed[1];
-      if (target.classList.contains("context"))
-        target.setAttribute("style", bg_context_gradient.replace(/#/g, senderHue));
-      else
-        target.setAttribute("style", bg_gradient.replace(/#/g, senderHue));
-    }
-  }
-
-  if (body.scrollHeight <= screen.height) {
-    if (senderHue) {
-      body.setAttribute("style", bg_color.replace("#", senderHue));
-    }
-    else if (target.classList.contains("outgoing")) {
-      body.className = "outgoing-color";
-      body.removeAttribute("style");
-    }
-    else if (target.classList.contains("incoming")) {
-      body.className = "incoming-color";
-      body.removeAttribute("style");
-    }
-    else if (target.classList.contains("event")) {
-      body.className = "event-color";
-      body.removeAttribute("style");
-    }
-  }
-}
-
-
-function checkNewText(target)
-{
-  if (target.tagName == "DIV")
-    setColors(target);
-  else if (target.tagName == "P" && target.className == "event") {
-    let parent = target.parentNode;
-    // We need to start a group with this element if there are at least 3
-    // system messages and they aren't already grouped.
-    if (!parent.grouped && parent.querySelector("p.event:nth-of-type(3)")) {
-      var div = document.createElement("div");
-      div.className = "eventToggle";
-      div.addEventListener("click", event =>
-        event.target.parentNode.classList.toggle("hide-children"));
-      parent.insertBefore(div, parent.querySelector("p.event:first-of-type"));
-      parent.classList.add("hide-children");
-      parent.grouped = true;
-    }
-  }
-}
-
-
-new MutationObserver(function(aMutations) {
-  for (let mutation of aMutations)
-    for (let node of mutation.addedNodes)
-      if (node instanceof HTMLElement)
-        checkNewText(node);
-}).observe(document.getElementById("ibcontent"),
-           {childList: true, subtree: true});
-</script>
deleted file mode 100644
--- a/im/themes/messages/papersheets/Incoming/Content.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="messages-group %messageClasses%" senderColor="%senderColor%">
-<p class="%messageClasses%"><span class="date">%time%</span> <span class="pseudo" style="%senderColor%">%sender%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
-</div>
deleted file mode 100644
--- a/im/themes/messages/papersheets/Incoming/Context.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="messages-group context %messageClasses%" senderColor="%senderColor%">
-<p class="%messageClasses%"><span class="date">%time%</span> <span class="pseudo" style="%senderColor%">%sender%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
-</div>
deleted file mode 100644
--- a/im/themes/messages/papersheets/Incoming/NextContent.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<hr/>
-<p class="%messageClasses%"><span class="date date-next">%time%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
deleted file mode 100644
--- a/im/themes/messages/papersheets/Info.plist
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-  <key>ActionMessageTemplate</key>
-  <string>%sender% %message%</string>
-  
-  <key>CFBundleDevelopmentRegion</key>
-  <string>English</string>
-  
-  <key>CFBundleGetInfoString</key>
-  <string>Instantbird PaperSheets Message Style</string>
-  
-  <key>CFBundleIdentifier</key>
-  <string>org.instantbird.papersheets.message.style</string>
-  
-  <key>CFBundleInfoDictionaryVersion</key>
-  <string>1.0</string>
-  
-  <key>CFBundleName</key>
-  <string>PaperSheets</string>
-  
-  <key>CFBundlePackageType</key>
-  <string>AdIM</string>
-  
-  <key>DefaultBackgroundColor</key>
-  <string>FFFFFF</string>
-  
-  <key>DisableCustomBackground</key>
-  <false/>
-  
-  <key>MessageViewVersion</key>
-  <integer>4</integer>
-  
-  <key>ShowsUserIcons</key>
-  <true/>
-</dict>
-</plist>
deleted file mode 100644
--- a/im/themes/messages/papersheets/NextStatus.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p class="%messageClasses%"><span class="date">%time%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
deleted file mode 100644
--- a/im/themes/messages/papersheets/Status.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="messages-group %messageClasses%">
-<p class="%messageClasses%"><span class="date">%time%</span> <span class="message-style">%message%</span></p>
-<div id="insert"/>
-</div>
deleted file mode 100644
--- a/im/themes/messages/papersheets/Variants/White.css
+++ /dev/null
@@ -1,22 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-div.outgoing { 
-  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1) 15px, rgba(255, 255, 255, 1) 15px, rgba(255, 255, 255, 1)) !important;
-}
-
-div.incoming { 
-  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1) 15px, rgba(255, 255, 255, 1) 15px, rgba(255, 255, 255, 1)) !important;
-}
-
-
-
-/* used by javascript */
-.outgoing-color {
-  background-color: rgb(255, 255, 255);
-}
-
-.incoming-color {
-  background-color: rgb(255, 255, 255);
-}
deleted file mode 100644
--- a/im/themes/messages/papersheets/main.css
+++ /dev/null
@@ -1,191 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-body {
-  margin: 0;
-  padding: 0;
-}
-
-p {
-  font-family: sans-serif;
-  margin: 0;
-  padding: 0;
-}
-
-div.messages-group {
-  margin: -15px 0 0 0;
-  padding: 18px 5px 20px 5px;
-}
-
-div.outgoing {
-  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1) 15px, rgba(245, 245, 255, 1) 15px, rgba(245, 245, 255, 1));
-}
-
-div.incoming {
-  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1) 15px, rgba(255, 245, 245, 1) 15px, rgba(255, 245, 245, 1));
-}
-
-div.event {
-  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1) 15px, rgba(255, 255, 240, 1) 15px, rgba(255, 255, 240, 1));
-}
-
-div.context+div.event {
-  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.05) 15px, rgba(255, 255, 240, 1) 15px, rgba(255, 255, 240, 1));
-}
-
-div.context:not(:hover)>p {
-  opacity: 0.55;
-}
-
-div.messages-group:last-child {
-  padding-bottom: 10px;
-}
-
-div.messages-group>hr {
-  margin: 3px 50px 0px 20px;
-  background-color: rgba(0, 0, 0, 0.05);
-  height: 1px;
-  border: 0;
-}
-
-span.message-style {
-  margin: 2px 50px 0px 20px;
-  display: block;
-  float: none;
-}
-
-span.date {
-  color: rgba(0, 0, 0, 0.4);
-  font-size: smaller;
-  text-align: right;
-  float: right;
-  display: block;
-}
-
-span.date-next {
-  opacity: 0.4;
-  margin-top: -6px;
-  -moz-transition-property: opacity;
-  -moz-transition-duration: 0.3s;
-}
-
-p:hover > span.date-next {
-  opacity: 1;
-}
-
-span.pseudo {
-  font-weight: bold;
-  float: none;
-  display: block;
-}
-
-p.outgoing>span.pseudo {
-  color: rgb(80,80,200);
-}
-
-p.incoming>span.pseudo {
-  color: rgb(200,80,80);
-}
-
-p.nick>span.message-style {
-  font-weight: bold;
-}
-
-p.action>span.message-style {
-  font-style: italic;
-}
-
-p.action>span.message-style:before {
-  content: "*** ";
-}
-
-p.event {
-  margin-left: 0px;
-  min-height: 16px;
-  background: url('Bitmaps/information.png') no-repeat top left;
-}
-
-p.event>span.message-style {
-  color: rgba(0, 0, 0, 0.4);
-}
-
-#Chat {
-  white-space: normal;
-}
-
-p *:any-link img {
-  margin-bottom: 1px;
-  border-bottom: solid 1px;
-}
-
-
-
-/* used by javascript */
-.outgoing-color {
-  background-color: rgb(245, 245, 255);
-}
-
-.incoming-color {
-  background-color: rgb(255, 245, 245);
-}
-
-.event-color {
-  background-color: rgb(255, 255, 240);
-}
-
-.eventToggle {
-  margin-top: -2px;
-  margin-left: -4px;
-  height: 9px;
-  width: 9px;
-  cursor: pointer;
-  background: url('Bitmaps/minus.png') no-repeat left top;
-}
-
-.hide-children > .eventToggle {
-  background-image: url('Bitmaps/plus.png');
-}
-
-.hide-children > p.event:first-of-type > .message-style:after {
-  content: "[\2026]"; /* &hellip; */
-  margin-left: 1em;
-  color: #5a7ac6;
-  font-size: smaller;
-}
-
-.hide-children > p.event:not(:first-of-type):not(:last-of-type) {
-  display: none;
-}
-
-/* Adapt styles to narrow windows */
-@media all and (max-width: 400px) {
-  div.messages-group > hr {
-    margin-right: 0;
-  }
-
-  span.message-style {
-    margin-right: 0;
-  }
-
-  span.date-next {
-    display: none;
-  }
-}
-
-@media all and (max-width: 200px) {
-  span.date {
-    display: none;
-  }
-}
-
-/* Adapt styles when the window is very low */
-@media all and (max-height: 200px) {
-  div.messages-group {
-    padding-bottom: 8px;
-  }
-
-  div.messages-group:last-child {
-    padding-bottom: 8px;
-  }
-}
deleted file mode 100644
--- a/im/themes/messages/simple/Incoming/Content.html
+++ /dev/null
@@ -1,1 +0,0 @@
-<p class="%messageClasses%"><span class="date">%time%</span><span class="pseudo" style="%senderColor%">%sender%</span>%message%</p>
deleted file mode 100644
--- a/im/themes/messages/simple/Incoming/Context.html
+++ /dev/null
@@ -1,1 +0,0 @@
-<p class="context %messageClasses%"><span class="date">%time%</span><span class="pseudo" style="%senderColor%">%sender%</span>%message%</p>
deleted file mode 100644
--- a/im/themes/messages/simple/Incoming/NextContext.html
+++ /dev/null
@@ -1,1 +0,0 @@
-<p class="context %messageClasses%"><span class="date">%time%</span><span class="pseudo" style="%senderColor%">%sender%</span>%message%</p>
deleted file mode 100644
--- a/im/themes/messages/simple/Info.plist
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>ActionMessageTemplate</key>
-	<string>%message%</string>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Instantbird Minimal Message Style</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.instantbird.minimal.message.style</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>1.0</string>
-	<key>CFBundleName</key>
-	<string>Minimal</string>
-	<key>CFBundlePackageType</key>
-	<string>AdIM</string>
-	<key>DefaultBackgroundColor</key>
-	<string>FFFFFF</string>
-	<key>DefaultVariant</key>
-	<string>Normal</string>
-	<key>DisableCustomBackground</key>
-	<false/>
-	<key>MessageViewVersion</key>
-	<integer>4</integer>
-	<key>ShowsUserIcons</key>
-	<true/>
-</dict>
-</plist>
deleted file mode 100644
--- a/im/themes/messages/simple/Status.html
+++ /dev/null
@@ -1,1 +0,0 @@
-<p aria-live="polite" class="%messageClasses%"><span class="date">%time%</span>%message%</p>
deleted file mode 100644
--- a/im/themes/messages/simple/Variants/Dark.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-body {
-  background: #222;
-  color: #eee;
-}
-.outgoing .pseudo {
-  color: #7878dc;
-}
-.incoming .pseudo {
-  color: #dc7878;
-}
-.event {
-  color: #828282;
-}
-a {
-  color: #5497ea;
-}
-.context {
-  color: #b2b2b4;
-}
deleted file mode 100644
deleted file mode 100644
--- a/im/themes/messages/simple/main.css
+++ /dev/null
@@ -1,74 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#Chat {
-  white-space: normal;
-}
-
-.pseudo {
-  font-weight: bold;
-}
-
-.outgoing .pseudo {
-  color: rgb(80,80,200);
-}
-
-.incoming .pseudo {
-  color: rgb(200,80,80);
-}
-
-.date {
-  font-style: normal;
-  font-weight: normal;
-}
-
-span.date:after {
-  content: " - ";
-}
-
-.action>span.date:after {
-  content: " * ";
-}
-
-span.pseudo:after {
-  content: ": ";
-}
-
-.action>span.pseudo:after {
-  content: " ";
-}
-
-.event>span.pseudo:after {
-  content: none;
-}
-
-.event {
-  color: rgb(170,170,170);
-}
-
-.nick {
-  font-weight: bold;
-}
-
-.action {
-  font-style: italic;
-}
-
-.context {
-  color: rgb(91,91,91);
-}
-
-p.context>.pseudo,
-p.context .ib-nick {
-  opacity: 0.7;
-}
-
-p {
-  margin: 0px auto;
-}
-
-p *:any-link img {
-  margin-bottom: 1px;
-  border-bottom: solid 1px;
-}
deleted file mode 100644
--- a/im/themes/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
-
-FINAL_TARGET_FILES.extensions['{972ce4c6-7e08-4474-a285-3208198ce6fd}'] += [
-    'icon.png',
-]
deleted file mode 100644
index e067fc69cb3d9aadd8f7c3d708d11b3e3d6e8b1f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d077642c2be32586cfa404e68b3e5110ad60bfbe..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1343d47544d4ff9747ee9c29e860ddb76a07cafe..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/newtab.css
+++ /dev/null
@@ -1,151 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-%ifdef XP_UNIX
-%ifndef XP_MACOSX
-%define XP_LINUX
-%endif
-%endif
-
-.newtab-toolbar {
-  margin: 0;
-  padding: 2px;
-  border-style: none;
-  -moz-appearance: none;
-%ifdef XP_MACOSX
-  background-color: -moz-mac-chrome-active;
-  background-image: -moz-linear-gradient(rgba(255,255,255,.43), rgba(255,255,255,0));
-  border-bottom: 1px solid rgba(0, 0, 0, 0.57);
-}
-
-.newtab-toolbar:-moz-window-inactive {
-  background-color: -moz-mac-chrome-inactive;
-  border-bottom-color: rgba(0, 0, 0, 0.32);
-%else
-  background-color: -moz-Dialog;
-%ifdef XP_WIN
-  background-image: -moz-linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,0));
-%else
-  background-image: -moz-linear-gradient(rgba(255,255,255,.3), rgba(255,255,255,0));
-%endif
-  border-bottom: 1px solid ThreeDShadow;
-%endif
-}
-
-.filterbox {
-  font-size: 13px;
-  padding: 2px;
-}
-
-.newtab-listbox {
-  margin: 0;
-  -moz-appearance: none;
-%ifndef XP_MACOSX
-  border-bottom: 2px solid;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-%endif
-}
-
-.newtab-item {
-  padding-top: 4px;
-  padding-bottom: 4px;
-}
-
-.displayName {
-  font-size: 16px;
-}
-
-.infoIcon {
-  height: 16px;
-  width: 16px;
-  max-height: 16px;
-  max-width: 16px;
-}
-
-.infoIcon[source="contact"] {
-  list-style-image: url("chrome://instantbird/skin/tag.png");
-}
-
-.infoIcon[source="chat"] {
-  list-style-image: url("chrome://chat/skin/chat-16.png");
-}
-
-.infoIcon[source="existing"] {
-  list-style-image: url("chrome://instantbird/skin/actionicon-tab.png");
-  padding: 3px 0 2px;
-%ifndef XP_LINUX
-  -moz-image-region: rect(0, 16px, 11px, 0);
-}
-
-.infoIcon[source="existing"][selected="true"] {
-  -moz-image-region: rect(11px, 16px, 22px, 0);
-%endif
-}
-
-@media (min-resolution: 2dppx) {
-  .infoIcon[source="contact"] {
-    list-style-image: url("chrome://instantbird/skin/tag@2x.png");
-  }
-
-  .infoIcon[source="existing"] {
-    list-style-image: url("chrome://instantbird/skin/actionicon-tab@2x.png");
-    -moz-image-region: rect(0, 32px, 22px, 0);
-  }
-
-  .infoIcon[source="existing"][selected="true"] {
-    -moz-image-region: rect(22px, 32px, 44px, 0);
-  }
-}
-
-.infoText {
-  margin-right: 0px !important;
-}
-
-.buddyIconHolder {
-  border: 2px solid rgba(0,0,0,0.15);
-  border-radius: 5px;
-  overflow: hidden;
-}
-
-.buddyIcon,
-.buddyIconHolder {
-  max-width: 48px;
-  max-height: 48px;
-  width: 48px;
-  height: 48px;
-}
-
-.buddyIcon[src=""] {
-  background-image: url("chrome://instantbird/skin/userIcon.png");
-  background-size: contain;
-  background-repeat: no-repeat;
-}
-
-.buddyIcon[src=""][chat] {
-  background-image: url("chrome://instantbird/skin/multiUserIcon.png");
-}
-
-.statusTypeIcon {
-  margin-top: 32px;
-  margin-left: 32px;
-  width: 16px;
-  height: 16px;
-}
-
-.statusTypeIcon[chat] {
-  list-style-image: none !important;
-}
-
-.protoIcon {
-  width: 16px;
-  height: 16px;
-  max-width: 16px;
-  max-height: 16px;
-  margin-right: 0px;
-}
-
-.newtabContent[status="offline"],
-.newtabContent[status="unknown"] {
-  opacity: 0.5;
-}
deleted file mode 100644
index 1853d3a0192bd8a6f0125dfd084f67c2862b5452..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dccc3e3b78535db4d63503db1427e18070b0ccda..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 45256d4e76b2aabb4c32889dc03bca3f9e5f80f4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/preferences-gnomestripe/applications.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * Line up the actions menu with action labels above and below it.
- * Equalize the distance from the left side of the action box to the left side
- * of the icon for both the menu and the non-menu versions of the action box.
- * Also make sure the labels are the same distance away from the icons.
- */
-.actionsMenu {
-  margin-top: -1px;
-  margin-bottom: -1px;
-  margin-inline-start: -1px;
-  margin-inline-end: 0;
-}
-
-.typeIcon,
-.actionIcon {
-  margin-inline-start: 3px;
-  margin-inline-end: 3px;
-}
-
-richlistitem label {
-  margin-inline-start: 1px;
-  margin-top: 2px;
-}
-
-richlistitem {
-  min-height: 25px;
-}
-
-richlistitem[appHandlerIcon="ask"],
-menuitem[appHandlerIcon="ask"] {
-  list-style-image: url("chrome://instantbird/skin/preferences/alwaysAsk.png");
-}
-
-richlistitem[appHandlerIcon="save"],
-menuitem[appHandlerIcon="save"] {
-  list-style-image: url("moz-icon://stock/gtk-save?size=menu");
-}
-
-richlistitem[appHandlerIcon="plugin"],
-menuitem[appHandlerIcon="plugin"] {
-  list-style-image: url("chrome://mozapps/skin/plugins/pluginGeneric-16.png");
-}
-
-.actionsMenu .menulist-icon {
-  margin-inline-end: 1px;
-  height: 16px;
-  width: 16px;
-}
-
-.actionsMenu > menupopup > menuitem > .menu-iconic-left {
-  padding-inline-start: 0;
-  padding-inline-end: 4px !important;
-}
-
-.actionsMenu > menupopup > menuitem {
-  padding-inline-start: 3px;
-}
deleted file mode 100644
index 66d2bc9e0ff60aa0601a3b837fd933d23ea79a2f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/preferences-gnomestripe/preferences.css
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-*/
-
-/* Global Styles */
-#BrowserPreferences radio[pane] {
-  list-style-image: url("chrome://instantbird/skin/preferences/Options.png");
-}
-
-radio[pane=paneMain] {
-  -moz-image-region: rect(0px, 32px,  32px, 0px)
-}
-
-radio[pane=paneTabs] {
-  -moz-image-region: rect(0px, 64px, 32px, 32px)
-}
-
-radio[pane=paneContent] {
-  -moz-image-region: rect(0px, 96px,  32px, 64px)
-}
-
-radio[pane=paneApplications] {
-  -moz-image-region: rect(0px, 128px,  32px, 96px)
-}
-
-radio[pane=panePrivacy] {
-  -moz-image-region: rect(0px, 160px,  32px, 128px)
-}
-
-radio[pane=paneThemes] {
-  -moz-image-region: rect(0px, 192px,  32px, 160px)
-}
-
-radio[pane=paneAdvanced] {
-  -moz-image-region: rect(0px, 224px, 32px, 192px)
-}
-
-/* Themes Pane */
-#BrowserPreferences[animated="true"] #smileysPreview {
-  height: 25em;
-}
-
-#BrowserPreferences[animated="false"] #smileysPreview {
-  -moz-box-flex: 1;
-}
-
-/* Applications Pane */
-#BrowserPreferences[animated="true"] #handlersView {
-  height: 25em;
-}
-
-#BrowserPreferences[animated="false"] #handlersView {
-  -moz-box-flex: 1;
-}
-
-/* Privacy Pane */
-
-#timeBeforeAway {
-  width: 5em;
-}
-
-/* styles for the link elements copied from .text-link in global.css */
-.inline-link {
-  color: -moz-nativehyperlinktext;
-  text-decoration: underline;
-}
-
-.inline-link:not(:focus) {
-  outline: 1px dotted transparent;
-}
-
-/* Modeless Window Dialogs */
-.windowDialog,
-.windowDialog prefpane {
-  padding: 0px;
-}
-
-.contentPane {
-  margin: 9px 8px 5px 8px;
-}
-
-.actionButtons {
-  margin: 0px 3px 6px 3px !important;
-}
-
-/* Cookies Manager */
-#cookiesChildren::-moz-tree-image(domainCol) {
-  width: 16px;
-  height: 16px;
-  margin: 0px 2px;
-  list-style-image: url("moz-icon://stock/gtk-file?size=menu");
-}
-
-#paneApplications {
-  margin-left: 4px;
-  margin-right: 4px;
-  padding-left: 0;
-  padding-right: 0;
-}
-
-#linksOpenInBox {
-  margin-top: 5px;
-}
-
-#paneAdvanced {
-  padding-bottom: 10px;
-}
-#advancedPrefs {
-  margin-left: 0;
-  margin-right: 0;
-}
-
-#cookiesChildren::-moz-tree-image(domainCol, container) {
-  list-style-image: url("moz-icon://stock/gtk-directory?size=menu");
-}
-
-#cookieInfoBox {
-  border: 1px solid ThreeDShadow;
-  border-radius: 0px;
-  margin: 4px;
-  padding: 0px;
-}
-
-/* bottom-most box containing a groupbox in a prefpane. Prevents the bottom
-   of the groupbox from being cutoff */
-.bottomBox {
-  padding-bottom: 4px;
-}
-
-/**
- * Clear Private Data
- */
-#SanitizeDialogPane > groupbox {
-  margin-top: 0;
-}
-
-/* Display the message theme preview browser with borders like a listbox */
-#previewbrowser {
-  -moz-appearance: listbox;
-  margin: 2px 4px;
-}
-
-/**
- * No message theme preview message box
- */
-#noPreviewScreen {
-  color: -moz-FieldText;
-  background-color: -moz-Field;
-  overflow: auto;
-}
-#noPreviewBox {
-  max-width: 30em;
-  background: url("chrome://global/skin/icons/info.svg") left 5px no-repeat;
-  background-size: 2.5em;
-  padding-right: 3.5em;
-  padding-left: 3.5em;
-  margin-left: 1.5em;
-  margin-right: 1.5em;
-}
-#noPreviewInnerBox {
-  opacity: .8;
-}
-#noPreviewTitle {
-  font-size: 2em;
-  font-weight: lighter;
-  line-height: 1.2;
-  margin: 0;
-  margin-bottom: .3em;
-  padding-bottom: .2em;
-  border-bottom: 1px solid -moz-FieldText;
-}
-#noPreviewDesc {
-  font-size: 110%;
-  margin-right: 0;
-  margin-left: 0;
-}
deleted file mode 100644
index 57c24f9b0127b384c87d035923a98eaf683952b7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c792d148871ee5790ecb55d5f0d9ab739980f087..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b4c1ca7d02bda83358e519639632ab55fafd6077..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/preferences-pinstripe/applications.css
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * Line up the actions menu with action labels above and below it.
- * Equalize the distance from the left side of the action box to the left side
- * of the icon for both the menu and the non-menu versions of the action box.
- * Also make sure the labels are the same distance away from the icons.
- */
-.actionsMenu {
-  margin-inline-start: -2px;
-  margin-top: 0;
-  margin-bottom: -1px;
-}
-
-.typeIcon,
-.actionIcon {
-  margin-inline-start: 3px;
-  margin-inline-end: 3px;
-}
-
-richlistitem label {
-  margin-inline-start: 1px;
-  margin-top: 2px;
-}
-
-richlistitem {
-  min-height: 22px;
-}
-
-richlistitem[appHandlerIcon="ask"],
-menuitem[appHandlerIcon="ask"] {
-  list-style-image: url("chrome://instantbird/skin/preferences/alwaysAsk.png");
-}
-
-richlistitem[appHandlerIcon="save"],
-menuitem[appHandlerIcon="save"] {
-  list-style-image: url("chrome://instantbird/skin/preferences/saveFile.png");
-}
-
-richlistitem[appHandlerIcon="plugin"],
-menuitem[appHandlerIcon="plugin"] {
-  list-style-image: url("chrome://mozapps/skin/plugins/pluginGeneric-16.png");
-}
-
-.actionsMenu .menulist-icon {
-  margin-inline-end: 1px;
-}
-
-.actionsMenu > menupopup > menuitem > .menu-iconic-left {
-  padding-inline-start: 3px;
-  padding-inline-end: 1px;
-}
deleted file mode 100644
--- a/im/themes/preferences-pinstripe/preferences.css
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-*/
-
-.windowDialog {
-  padding: 12px;
-  font: -moz-dialog;
-}
-
-.paneSelector {
-  list-style-image: url("chrome://instantbird/skin/preferences/Options.png");
-}
-
-/* ----- GENERAL BUTTON ----- */
-
-radio[pane=paneGeneral],
-radio[pane=paneMain] {
-	-moz-image-region: rect(0px, 32px, 32px, 0px)
-}
-radio[pane=paneGeneral]:active,
-radio[pane=paneMain]:active:hover {
-	-moz-image-region: rect(32px, 32px, 64px, 0px)
-}
-
-/* ----- TABS BUTTON ----- */
-
-radio[pane=paneTabs] {
-	-moz-image-region: rect(0px, 64px, 32px, 32px);
-}
-
-radio[pane=paneTabs]:active:hover {
-	-moz-image-region: rect(32px, 64px, 64px, 32px);
-}
-
-/* ----- CONTENT BUTTON ----- */
-
-radio[pane=paneContent] {
-	-moz-image-region: rect(0px, 96px, 32px, 64px);
-}
-
-radio[pane=paneContent]:active:hover {
-	-moz-image-region: rect(32px, 96px, 64px, 64px);
-}
-
-/* ----- APPLICATIONS BUTTON ----- */
-
-radio[pane=paneApplications] {
-	-moz-image-region: rect(0px, 128px, 32px, 96px);
-}
-
-radio[pane=paneApplications]:active:hover {
-	-moz-image-region: rect(32px, 128px, 64px, 96px);
-}
-
-/* ----- PRIVACY BUTTON ----- */
-
-radio[pane=panePrivacy] {
-	-moz-image-region: rect(0px, 160px, 32px, 128px);
-}
-
-radio[pane=panePrivacy]:active:hover {
-	-moz-image-region: rect(32px, 160px, 64px, 128px);
-}
-
-/* ----- THEMES BUTTON ----- */
-
-radio[pane=paneThemes] {
-	-moz-image-region: rect(0px, 192px, 32px, 160px);
-}
-
-radio[pane=paneThemes]:active:hover {
-	-moz-image-region: rect(32px, 192px, 64px, 160px);
-}
-
-/* ----- ADVANCED BUTTON ----- */
-
-radio[pane=paneAdvanced] {
-	-moz-image-region: rect(0px, 224px, 32px, 192px);
-}
-
-radio[pane=paneAdvanced]:active:hover {
-	-moz-image-region: rect(32px, 224px, 64px, 192px);
-}
-
-/* ----- Smileys preview ----- */
-#BrowserPreferences[animated="true"] #smileysPreview {
-  height: 25em;
-}
-
-#BrowserPreferences[animated="false"] #smileysPreview {
-  -moz-box-flex: 1;
-}
-
-/* ----- APPLICATIONS PREFPANE ----- */
-#BrowserPreferences[animated="true"] #handlersView {
-  height: 25em;
-}
-
-#BrowserPreferences[animated="false"] #handlersView {
-  -moz-box-flex: 1;
-}
-
-description {
-  font: small-caption;
-  font-weight: normal;
-  line-height: 1.3em;
-  margin-bottom: 4px !important;
-}
-
-prefpane .groupbox-body {
-  -moz-appearance: none;
-  padding: 8px 4px 4px 4px;
-}
-
-#paneTabs > groupbox {
-  margin: 0;
-}
-
-#paneTabs > vbox {
-  margin: 12px 4px;
-}
-
-prefpane .groupbox-title {
-  background: url("chrome://global/skin/50pct_transparent_grey.png") repeat-x bottom left;
-  margin-bottom: 4px;
-}
-
-tabpanels {
-  padding: 20px 7px 7px;
-}
-
-caption {
-  padding-inline-start: 5px;
-  padding-top: 4px;
-  padding-bottom: 2px;
-}
-
-#paneMain description,
-#paneContent description,
-#panePrivacy description,
-#paneAdvanced description,
-#paneThemes description {
-  font: -moz-dialog;
-}
-
-#paneContent {
-  padding-top: 8px;
-}
-
-#paneContent row {
-  padding: 2px 4px;
-  -moz-box-align: center;
-}
-
-#popupPolicyRow,
-#enableSoftwareInstallRow,
-#purpleConnectionBox,
-#enableImagesRow {
-  margin-bottom: 4px !important;
-  padding-bottom: 4px !important;
-  border-bottom: 1px solid #ccc;
-}
-
-#browserUseCurrent,
-#browserUseBookmark,
-#browserUseBlank {
-  margin-top: 10px;
-}
-
-#advancedPrefs {
-  margin: 0 8px;
-}
-
-#privacyPrefs {
-  padding: 0 4px;
-}
-
-#privacyPrefs > tabpanels {
-  padding: 18px 10px 10px 10px;
-}
-
-#OCSPDialogPane {
-  font: message-box !important;
-}
-
-/**
- * Privacy Pane
- */
-
-#timeBeforeAway {
-  width: 5em;
-}
-
-/* styles for the link elements copied from .text-link in global.css */
-.inline-link {
-  color: -moz-nativehyperlinktext;
-  text-decoration: underline;
-}
-
-.inline-link:not(:focus) {
-  outline: 1px dotted transparent;
-}
-
-/**
- * Update Preferences
- */
-#autoInstallOptions {
-  margin-inline-start: 20px;
-}
-
-.updateControls {
-  margin-inline-start: 10px;
-}
-
-/**
- * Clear Private Data
- */
-#SanitizeDialogPane > groupbox {
-  margin-top: 0;
-}
-
-/* Display the message theme preview browser with borders like a listbox */
-#previewbrowser {
-  -moz-appearance: listbox;
-  margin: 2px 4px;
-}
-
-/**
- * No message theme preview message box
- */
-#noPreviewScreen {
-  color: -moz-FieldText;
-  background-color: -moz-Field;
-  overflow: auto;
-}
-#noPreviewBox {
-  max-width: 30em;
-  background: url("chrome://global/skin/icons/info.svg") left 5px no-repeat;
-  background-size: 2.5em;
-  padding-right: 3.5em;
-  padding-left: 3.5em;
-  margin-left: 1.5em;
-  margin-right: 1.5em;
-}
-#noPreviewInnerBox {
-  opacity: .8;
-}
-#noPreviewTitle {
-  font-size: 2em;
-  font-weight: lighter;
-  line-height: 1.2;
-  margin: 0;
-  margin-bottom: .3em;
-  padding-bottom: .2em;
-  border-bottom: 1px solid -moz-FieldText;
-}
-#noPreviewDesc {
-  font-size: 110%;
-  margin-right: 0;
-  margin-left: 0;
-}
deleted file mode 100644
index 7177f8df3001e84c14d6e86e5bf327bb510f3cd1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 72ed56bc383bb3ad69c0efa2c64df0fcc929bb9f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2eea237a2d8c125c6a1d93bc24c0cd5274b4a9d2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d12805ef0e8d1f05f6409ef4b13c3f03ba3f7741..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ddd4cb2130b28944644838a11f4050da251dfbc6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d67993d593dbee0a45c7258a9018438c4d89de80..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ff2ecc2f351ef37d250264aa2bb273de08518165..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/preferences-winstripe/applications.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * Line up the actions menu with action labels above and below it.
- * Equalize the distance from the left side of the action box to the left side
- * of the icon for both the menu and the non-menu versions of the action box.
- * Also make sure the labels are the same distance away from the icons.
- */
-.actionsMenu {
-  margin-top: 0;
-  margin-bottom: 0;
-  margin-inline-start: -2px;
-  margin-inline-end: 0;
-}
-
-.typeIcon,
-.actionIcon {
-  margin-inline-start: 3px;
-  margin-inline-end: 3px;
-}
-
-richlistitem label {
-  margin-inline-start: 1px;
-  margin-top: 2px;
-}
-
-richlistitem {
-  min-height: 22px;
-}
-
-richlistitem[appHandlerIcon="ask"],
-menuitem[appHandlerIcon="ask"] {
-  list-style-image: url("chrome://instantbird/skin/preferences/alwaysAsk.png");
-}
-
-richlistitem[appHandlerIcon="save"],
-menuitem[appHandlerIcon="save"] {
-  list-style-image: url("chrome://instantbird/skin/preferences/application.png");
-}
-
-richlistitem[appHandlerIcon="plugin"],
-menuitem[appHandlerIcon="plugin"] {
-  list-style-image: url("chrome://mozapps/skin/plugins/pluginGeneric-16.png");
-}
-
-.actionsMenu .menulist-icon {
-  margin-inline-end: 3px;
-}
-
-.actionsMenu > menupopup > menuitem > .menu-iconic-left {
-  padding-inline-start: 0px;
-  padding-inline-end: 2px;
-}
-
-.actionsMenu > menupopup > menuitem {
-  padding-inline-start: 4px;
-}
deleted file mode 100644
index be1ed4d3893672f5e10f333a2fefbdf411377085..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c40d15991dc6c959266353c06afff2ac93e918ed..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/preferences-winstripe/preferences.css
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-*/
-
-/* Global Styles */
-#BrowserPreferences radio[pane] {
-  list-style-image: url("chrome://instantbird/skin/preferences/Options.png");
-  padding: 5px 3px 1px;
-}
-
-radio[pane=paneMain] {
-	-moz-image-region: rect(0px, 32px,  32px, 0px)
-}
-radio[pane=paneMain]:hover,
-radio[pane=paneMain][selected="true"]  {
-	-moz-image-region: rect(32px, 32px,  64px, 0px)
-}
-
-radio[pane=paneTabs] {
-	-moz-image-region: rect(0px, 64px, 32px, 32px)
-}
-radio[pane=paneTabs]:hover,
-radio[pane=paneTabs][selected="true"] {
-	-moz-image-region: rect(32px, 64px, 64px, 32px)
-}
-
-radio[pane=paneContent] {
-	-moz-image-region: rect(0px, 96px,  32px, 64px)
-}
-radio[pane=paneContent]:hover,
-radio[pane=paneContent][selected="true"]  {
-	-moz-image-region: rect(32px, 96px,  64px, 64px)
-}
-
-radio[pane=paneApplications] {
-	-moz-image-region: rect(0px, 128px,  32px, 96px)
-}
-radio[pane=paneApplications]:hover,
-radio[pane=paneApplications][selected="true"]  {
-	-moz-image-region: rect(32px, 128px,  64px, 96px)
-}
-
-radio[pane=panePrivacy] {
-	-moz-image-region: rect(0px, 160px,  32px, 128px)
-}
-radio[pane=panePrivacy]:hover,
-radio[pane=panePrivacy][selected="true"]  {
-	-moz-image-region: rect(32px, 160px,  64px, 128px)
-}
-
-radio[pane=paneThemes] {
-	-moz-image-region: rect(0px, 192px,  32px, 160px)
-}
-radio[pane=paneThemes]:hover,
-radio[pane=paneThemes][selected="true"]  {
-	-moz-image-region: rect(32px, 192px,  64px, 160px)
-}
-
-radio[pane=paneAdvanced] {
-	-moz-image-region: rect(0px, 224px, 32px, 192px)
-}
-radio[pane=paneAdvanced]:hover,
-radio[pane=paneAdvanced][selected="true"] {
-	-moz-image-region: rect(32px, 224px, 64px, 192px)
-}
-
-/* Themes Pane */
-#BrowserPreferences[animated="true"] #smileysPreview {
-  height: 25em;
-}
-
-#BrowserPreferences[animated="false"] #smileysPreview {
-  -moz-box-flex: 1;
-}
-
-/* Applications Pane */
-#BrowserPreferences[animated="true"] #handlersView {
-  height: 25em;
-}
-
-#BrowserPreferences[animated="false"] #handlersView {
-  -moz-box-flex: 1;
-}
-
-/* Privacy Pane */
-
-#timeBeforeAway {
-  width: 5em;
-}
-
-/* styles for the link elements copied from .text-link in global.css */
-.inline-link {
-  color: -moz-nativehyperlinktext;
-  text-decoration: underline;
-}
-
-.inline-link:not(:focus) {
-  outline: 1px dotted transparent;
-}
-
-/* Modeless Window Dialogs */
-.windowDialog,
-.windowDialog prefpane {
-  padding: 0px;
-}
-
-.contentPane {
-  margin: 9px 8px 5px 8px;
-}
-
-.actionButtons {
-  margin: 0px 3px 6px 3px !important;
-}
-
-/* Cookies Manager */
-#cookiesChildren::-moz-tree-image(domainCol) {
-  width: 16px;
-  height: 16px;
-  margin: 0px 2px;
-  list-style-image: url("chrome://global/skin/icons/folder-item.png") !important;
-  -moz-image-region: rect(0px, 16px, 16px, 0px);
-}
-
-#cookiesChildren::-moz-tree-image(domainCol, container) {
-  -moz-image-region: rect(0px, 32px, 16px, 16px);
-}
-
-#cookiesChildren::-moz-tree-image(domainCol, container, open) {
-  -moz-image-region: rect(16px, 32px, 32px, 16px);
-}
-
-#cookieInfoBox {
-  border: 1px solid ThreeDShadow;
-  border-radius: 0px;
-  margin: 4px;
-  padding: 0px;
-}
-
-/* Advanced Pane */
-
-/* Adding padding-bottom prevents the bottom of the tabpanel from being cutoff
-   when browser.preferences.animateFadeIn = true */
-#advancedPrefs {
-  padding-bottom: 8px;
-}
-
-/* bottom-most box containing a groupbox in a prefpane. Prevents the bottom
-   of the groupbox from being cutoff */
-.bottomBox {
-  padding-bottom: 4px;
-}
-
-/* Display the message theme preview browser with borders like a listbox */
-#previewbrowser {
-  -moz-appearance: listbox;
-  margin: 2px 4px;
-}
-
-/* No message theme preview message box */
-
-#noPreviewScreen {
-  color: -moz-FieldText;
-  background-color: -moz-Field;
-  overflow: auto;
-}
-#noPreviewBox {
-  max-width: 30em;
-  background: url("chrome://global/skin/icons/info.svg") left 5px no-repeat;
-  background-size: 2.5em;
-  padding-right: 3.5em;
-  padding-left: 3.5em;
-  margin-left: 1.5em;
-  margin-right: 1.5em;
-}
-#noPreviewInnerBox {
-  opacity: .8;
-}
-#noPreviewTitle {
-  font-size: 2em;
-  font-weight: lighter;
-  line-height: 1.2;
-  margin: 0;
-  margin-bottom: .3em;
-  padding-bottom: .2em;
-  border-bottom: 1px solid -moz-FieldText;
-}
-#noPreviewDesc {
-  font-size: 110%;
-  margin-right: 0;
-  margin-left: 0;
-}
deleted file mode 100644
index 1248dd30c11bf6f8aace0d069da3998c98741413..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c210e8473f4c7ee9958a80b94965d522a15e4584..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/richlistbox.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* Mostly copied from the download manager */
-
-/* List Items */
-richlistitem {
-  padding-top: 6px;
-  padding-bottom: 6px;
-  padding-inline-start: 4px;
-  padding-inline-end: 4px;
-  min-height: 25px;
-%ifndef XP_MACOSX
-%ifdef XP_WIN
-  border-bottom: 1px solid ThreeDLightShadow;
-%else
-  border-bottom: 1px dotted #C0C0C0;
-%endif
-%endif
-}
-
-%ifdef XP_UNIX
-%ifdef XP_MACOSX
-richlistitem:not([selected="true"]):nth-child(odd) {
-  background-color: -moz-oddtreerow;
-}
-%else
-richlistitem[selected="true"]:-moz-window-inactive {
-  background-color: -moz-Dialog;
-  color: -moz-DialogText;
-}
-%endif
-%endif
deleted file mode 100644
index 76cd4af9679f5cb0547a65c267e468ba7bd010c4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d1e277d162ccc41f5c056222a479ab33bcdcd094..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 14ea2967f031b5871c516fbb9491ab2ba247f786..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 46cb432cd74541585dcb6a7a6158102139f109ef..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cf0096f553ef97a6ddf0e57dbfda458f832097e5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9ebf7d8988ba0df51b9859d15ee1ffe8d236bc37..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d80fc10827e5cbcae4c195e26caaf236a8c0670d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b0d4196537da459df1ff0176d832f92fdc0b8b5f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a7e1bd066dc56b8394bd3377bcc0f622c56c8028..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e7072732a52396dd3b73b5bb4a0a8e54f110db26..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f375aefa737eb75545983547b5a9406834d5d7d3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c20601bbe2f51f977dac330f09c9afe53320e6f4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9903039dfdcc35c2f06d312ee061a1ad4445e72e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3de53a97d6fece2c00dae657f9e944fcfd0b6e6d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8c579f47e383d63d755a09251eca17ee7a8fabb3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 65ee06bf7b41197695bcf0fde9c27ad46e3e822e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f0622a02c3320f161010a868ea1524df7bb2e796..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2825b9659f67197201c39ed1d6a2fbb376bf6da3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 074d1cc0167b828f2e1a8465f8ba8037e9f177f2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 40d84ea7d62ab5b6b9c7ac650566274db6745cef..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index db62c654ebac741cf436a325a5c151499bacd5ad..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/smileys/theme.js
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "smileys": [
-    {"filename": "smile.png", "textCodes": [":-)", ":)", "(-:", "(:"]},
-    {"filename": "grin.png", "textCodes": [":-D", ":D"]},
-    {"filename": "wink.png", "textCodes": [";-)", ";)"]},
-    {"filename": "cry.png", "textCodes": [":'("]},
-    {"filename": "shocked.png", "textCodes": [":-o", ":-O", ":o", ":O", "=-o", "=-O"]},
-    {"filename": "confused.png", "textCodes": [":-S", ":S", ":-s", ":s"]},
-    {"filename": "slant.png", "textCodes": [":-/"]},
-    {"filename": "slant2.png", "textCodes": [":-\\"], "hidden": true},
-    {"filename": "angry.png", "textCodes": ["x-(", ">:("]},
-    {"filename": "sad.png", "textCodes": [":-(", ":(", ")-:", "):"]},
-    {"filename": "cool.png", "textCodes": ["B-)", "8-)"]},
-    {"filename": "tongue.png", "textCodes": [":-P", ":P", ":-p", ":p"]},
-    {"filename": "embarrassed.png", "textCodes": [":-]", ":]"]},
-    {"filename": "heart.png", "textCodes": ["<3"]},
-    {"filename": "straight_face.png", "textCodes": [":-|"]},
-    {"filename": "manga_smile.png", "textCodes": ["^^"]},
-    {"filename": "manga_embarrassed.png", "textCodes": ["^^'"]},
-    {"filename": "manga_tired.png", "textCodes": ["-_-"]},
-    {"filename": "manga_annoyed.png", "textCodes": ["-_-'", "--'"]},
-    {"filename": "manga_stunned.png", "textCodes": ["o_o", "O_O"]},
-    {"filename": "sp_laugh.png", "textCodes": ["XD", "xD"]}
-  ]
-}
deleted file mode 100644
index 225b661df76c22499c28e1bea8091ca90be29708..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 556c2a5c72849e90fe4c34d4163174c08e72af06..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e456f4ae56ffd595f78cf8534aa077f5ea9ce99c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ec06433ef4f8fc51df31c0bd3dcd7971edb22289..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 69af2462d0956142e0e164c22aad30c32b4bcc70..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dce135e0f08c344944ab7f4e0feda137a035b4ed..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c77beb7f8f9ee3123fb8b6bb8c428a02db319702..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 77f2462e5bfda652074261e2e160fcbc99c3e04e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index deeeb0add3074b1bf453f08dc96cbf84c43bb74f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index df7d914f8ef208bc6ee0a8eb6ecc421b7cd9ad99..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/tabbrowser-gnomestripe/tabbrowser.css
+++ /dev/null
@@ -1,252 +0,0 @@
-%if 0
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-%endif
-
-@import url("chrome://global/skin/");
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-%filter substitution
-%define toolbarHighlight rgba(255,255,255,.3)
-%define selectedTabHighlight rgba(255,255,255,.8) 1px, rgba(255,255,255,.5) 3px
-
-/* Tabstrip */
-
-.tabbrowser-strip {
-  min-height: 0;
-  padding: 0;
-}
-
-.tabbrowser-strip:not(:-moz-lwtheme) {
-  -moz-appearance: menubar;
-  color: -moz-menubartext;
-  box-shadow: 0 -1px 0 rgba(0,0,0,.1) inset;
-}
-
-.tabbrowser-strip:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
-  -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag");
-}
-
-.tabbrowser-tab,
-.tabbrowser-arrowscrollbox > .tabs-newtab-button {
-  position: static;
-  -moz-appearance: none;
-  background: -moz-linear-gradient(hsla(0,0%,100%,.2), hsla(0,0%,45%,.2) 2px, hsla(0,0%,32%,.2) 80%);
-  background-origin: border-box;
-  background-position: 1px 2px;
-  background-size: 100% -moz-calc(100% - 2px);
-  background-repeat: no-repeat;
-  color: inherit;
-  margin: 0;
-  padding: 0;
-  border-width: 4px 5px 3px 6px;
-  border-style: solid;
-  border-image: url(tabbrowser/tab.png) 4 5 3 6 fill repeat stretch;
-  border-radius: 10px 8px 0 0;
-  min-height: 25px; /* reserve space for the sometimes hidden close button */
-}
-
-.tabbrowser-tab:hover,
-.tabs-newtab-button:hover {
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.2) 4px, hsla(0,0%,75%,.2) 80%);
-}
-
-.tabbrowser-tab[selected="true"] {
-  background-image: -moz-linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 32%),
-                    -moz-linear-gradient(-moz-dialog, -moz-dialog);
-  color: -moz-dialogtext;
-}
-
-.tabbrowser-tab[selected="true"]:-moz-lwtheme {
-  background-image: -moz-linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 32%);
-  color: inherit;
-}
-
-.tabbrowser-tab:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabs-newtab-button:-moz-lwtheme-brighttext {
-  background-image: -moz-linear-gradient(hsla(0,0%,60%,.6), hsla(0,0%,40%,.6) 4px, hsla(0,0%,30%,.6) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-brighttext:not([selected="true"]):hover,
-.tabs-newtab-button:-moz-lwtheme-brighttext:hover {
-  background-image: -moz-linear-gradient(hsla(0,0%,80%,.6), hsla(0,0%,60%,.6) 4px, hsla(0,0%,45%,.6) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-darktext:not([selected="true"]),
-.tabs-newtab-button:-moz-lwtheme-darktext {
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.5), hsla(0,0%,60%,.5) 4px, hsla(0,0%,45%,.5) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-darktext:not([selected="true"]):hover,
-.tabs-newtab-button:-moz-lwtheme-darktext:hover {
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.5), hsla(0,0%,80%,.5) 4px, hsla(0,0%,60%,.5) 80%);
-}
-
-.tabbrowser-tab:focus > .tab-stack {
-  outline: 1px dotted;
-}
-
-.tab-icon-image {
-  width: 16px;
-  height: 16px;
-  margin-inline-end: 3px;
-}
-
-.tabs-newtab-button > .toolbarbutton-icon {
-  margin-inline-start: 2px;
-  margin-inline-end: 2px;
-}
-
-#context_closeOtherTabs {
-  list-style-image: url("moz-icon://stock/gtk-clear?size=menu");
-}
-
-#context_closeOtherTabs[disabled] {
-  list-style-image: url("moz-icon://stock/gtk-clear?size=menu&state=disabled");
-}
-
-#context_closeTab {
-  list-style-image: url("moz-icon://stock/gtk-close?size=menu");
-}
-
-/* Tab drag and drop */
-.tab-drop-indicator-bar {
-  height: 11px;
-  margin-top: -11px;
-  position: relative;
-  /* set margin-inline-start to -1/2 indicator width: */
-  margin-inline-start: -5px;
-  margin-inline-end: -11px;
-}
-
-.tab-drop-indicator {
-  z-index: 1;
-  margin-top: 30px;
-  height: 11px;
-  width: 11px;
-  margin-bottom: -30px;
-  position: relative;
-  background: url('chrome://instantbird/skin/tabbrowser/tabDragIndicator.png') 50% 50% no-repeat;
-}
-
-/* In-tab close button */
-.tab-close-button > .toolbarbutton-icon {
-  /* XXX Buttons have padding in widget/ that we don't want here but can't override with good CSS, so we must
-     use evil CSS to give the impression of smaller content */
-  margin: -4px;
-}
-
-.tab-close-button {
-  padding: 0;
-  list-style-image: url("moz-icon://stock/gtk-close?size=menu");
-  margin-top: -1px;
-  margin-bottom: -1px;
-  margin-inline-end: -1px;
-}
-
-/* Tabstrip new tab button */
-.tabs-newtab-button {
-  list-style-image: url("moz-icon://stock/gtk-add?size=menu");
-  -moz-image-region: auto;
-}
-
-/* Tabstrip close button */
-.tabs-closebutton {
-  list-style-image: url("moz-icon://stock/gtk-close?size=menu");
-}
-
-.tabs-closebutton > .toolbarbutton-icon {
-  /* XXX Buttons have padding in widget/ that we don't want here but can't override with good CSS, so we must
-     use evil CSS to give the impression of smaller content */
-  margin: -2px;
-}
-
-/* Tabbrowser arrowscrollbox arrows */
-.tabbrowser-arrowscrollbox > .scrollbutton-up,
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  -moz-appearance: none;
-  margin: 0;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up {
-  border-inline-start: 0;
-  border-inline-end: 2px solid transparent;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  border-inline-start: 2px solid transparent;
-  border-inline-end: 0;
-  -moz-transition: 1s box-shadow ease-out;
-  border-radius: 4px;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down[notifybgtab] {
-  box-shadow: 0 0 5px 5px Highlight inset;
-  -moz-transition: none;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):-moz-locale-dir(ltr),
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):-moz-locale-dir(rtl) {
-  border-width: 0 2px 0 0;
-  border-style: solid;
-  border-image: url("chrome://instantbird/skin/tabbrowser/tab-overflow-border.png") 0 2 0 2 fill;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):-moz-locale-dir(ltr),
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):-moz-locale-dir(rtl) {
-  border-width: 0 0 0 2px;
-  border-style: solid;
-  border-image: url("chrome://instantbird/skin/tabbrowser/tab-overflow-border.png") 0 2 0 2 fill;
-}
-
-.tabs-alltabs-button > .toolbarbutton-icon,
-.tabs-alltabs-button > .toolbarbutton-menu-dropmarker,
-.tabs-alltabs-button > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
-  margin-top: -2px;
-  margin-bottom: -2px;
-}
-
-.tabs-alltabs-button > .toolbarbutton-icon {
-  display: none;
-}
-
-/* All tabs menupopup */
-.alltabs-item[selected="true"] {
-  font-weight: bold;
-}
-
-.alltabs-item[tabIsVisible] {
-  /* box-shadow instead of background-color to work around native styling */
-  box-shadow: inset -5px 0 ThreeDShadow;
-}
-
-
-/* Status panel */
-
-.statuspanel-label {
-  margin: 0;
-  padding: 2px 4px;
-  background: linear-gradient(#fff, #ddd);
-  border: 1px none #ccc;
-  border-top-style: solid;
-  color: #333;
-  text-shadow: none;
-}
-
-.statuspanel-label:-moz-locale-dir(ltr):not([mirror]),
-.statuspanel-label:-moz-locale-dir(rtl)[mirror] {
-  border-right-style: solid;
-  border-top-right-radius: .3em;
-  margin-right: 1em;
-}
-
-.statuspanel-label:-moz-locale-dir(rtl):not([mirror]),
-.statuspanel-label:-moz-locale-dir(ltr)[mirror] {
-  border-left-style: solid;
-  border-top-left-radius: .3em;
-  margin-left: 1em;
-}
-
deleted file mode 100644
index 4d71308d278644ee9dda74ddac9207c0b1b26b3b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 875f73c5e2080b247f9345f10677fdf42f33039a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94a11fe5f9bf2b6b506de7e810893125d66b018c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 32e42b04cce15cb654b44bc882b264bec5efa963..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ffde5f05086c366c5873e0d5fa383f45982ae002..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 61ad41ae9a01660261253aed82c21fb0bd5e10c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 20bf78db21347a968e519564dc6aa39f4cc5fa78..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 37ccf8cfe312e7a2438eed5a3625afb6ce7de02c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index d319accc51cf1b9d0dc2cf4224f1349def1eeab6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 73c778af033150dac75d515b11763bf2567395bc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f41b253d0bce22c49f06bba7bdf1934813ff3562..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index a8215a283d57a01334bd53c4a864ad373cfc4cd8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5987a2fe32d7e26d7b0ae3f80625e69ae9b7d45f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 658b291d3940b0a53d321f54ff86e2ade53cf82f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 930e76588fed21ab53cd454f1e7f0d82989b814b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 7de41e77b273e66b7578c11c96efbe054b1655fc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a373cae538b323666b9a0a363077c00f73c1a0f6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b51b873cbd928ba222d9244eaf5c06562d699427..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/tabbrowser-pinstripe/tabbrowser.css
+++ /dev/null
@@ -1,597 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-@import url("chrome://global/skin/");
-
-%filter substitution
-%define loweredShadow 0 1px rgba(255, 255, 255, .4)
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-statusbarpanel#statusbar-display {
-  padding-inline-start: 0;
-}
-
-.statusbarpanel-text {
-  margin-top: 2px;
-  margin-bottom: 0;
-}
-
-#convWindow {
-  -moz-appearance: none;
-  background-color: #eeeeee;
-}
-
-/* ::::: tabbrowser ::::: */
-
-.tabbrowser-tabbox {
-  margin: 0;
-}
-
-.tab-icon-image {
-  width: 16px;
-  height: 16px;
-}
-
-.tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-icon-image:not([selected="true"]) {
-  opacity: .8;
-}
-
-.tab-stack {
-  /* ensure stable tab height with and without toolbarbuttons on the tab bar */
-  height: 26px;
-}
-
-.tabbrowser-tab,
-.tabs-newtab-button {
-  -moz-appearance: none;
-  font: message-box;
-  font-weight: bold;
-  text-shadow: @loweredShadow@;
-  margin: 0;
-  padding: 0;
-  border: none;
-  text-align: center;
-  -moz-box-align: stretch;
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background {
-  margin-top: 3px;
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background:not([selected="true"]):not(:-moz-lwtheme) {
-  margin-bottom: 2px;
-}
-
-.tab-background,
-.tab-content,
-.tabs-newtab-button > .toolbarbutton-icon {
-  margin-inline-start: -5px;
-  margin-inline-end: -4px;
-  pointer-events: none;
-}
-
-.tab-close-button {
-  pointer-events: auto;
-}
-
-.tabbrowser-tabs[closebuttons="hidden"] > * > * > * > .tab-close-button {
-  display: -moz-box;
-  visibility: hidden;
-}
-
-.tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
-  padding-inline-start: 5px;
-  padding-inline-end: 4px;
-}
-
-.tab-content,
-.tabs-newtab-button > .toolbarbutton-icon {
-  -moz-box-align: center;
-  border: solid transparent;
-  border-width: 0 11px;
-}
-
-.tab-background-start,
-.tab-background-end {
-  width: 12px;
-  height: 21px;
-}
-
-.tab-background-middle {
-  -moz-box-flex: 1;
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start:-moz-locale-dir(ltr),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end:-moz-locale-dir(rtl) {
-  mask: url(chrome://instantbird/content/instantbird.xul#pinstripe-tab-left-curve-mask);
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end:-moz-locale-dir(ltr),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start:-moz-locale-dir(rtl) {
-  mask: url(chrome://instantbird/content/instantbird.xul#pinstripe-tab-right-curve-mask);
-}
-
-.tab-background-start[selected="true"]:not(:-moz-lwtheme),
-.tab-background-middle[selected="true"]:not(:-moz-lwtheme),
-.tab-background-end[selected="true"]:not(:-moz-lwtheme) {
-  background-color: -moz-mac-chrome-active;
-}
-
-.tab-background-start[selected="true"]:not(:-moz-lwtheme):-moz-window-inactive,
-.tab-background-middle[selected="true"]:not(:-moz-lwtheme):-moz-window-inactive,
-.tab-background-end[selected="true"]:not(:-moz-lwtheme):-moz-window-inactive {
-  background-color: -moz-mac-chrome-inactive;
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-middle:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end:-moz-lwtheme-brighttext:not([selected="true"]) {
-  background-image: -moz-linear-gradient(hsla(0,0%,40%,.6), hsla(0,0%,30%,.6) 50%);
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start:-moz-lwtheme-darktext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-middle:-moz-lwtheme-darktext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end:-moz-lwtheme-darktext:not([selected="true"]) {
-  background-image: -moz-linear-gradient(hsla(0,0%,60%,.5), hsla(0,0%,45%,.5) 50%);
-}
-
-.tabbrowser-tab > .tab-stack > .tab-content,
-.tabbrowser-arrowscrollbox > .tabs-newtab-button > .toolbarbutton-icon {
-  border-image: url(chrome://instantbird/skin/tabbrowser/tab-top-normal-active.png) 0 11 fill repeat stretch;
-}
-
-.tabbrowser-tab:hover > .tab-stack > .tab-content:not([selected="true"]),
-.tabbrowser-arrowscrollbox > .tabs-newtab-button:hover > .toolbarbutton-icon {
-  border-image: url(chrome://instantbird/skin/tabbrowser/tab-top-hover-active.png) 0 11 fill repeat stretch;
-}
-
-.tabbrowser-tab > .tab-stack > .tab-content[selected="true"] {
-  border-image: url(chrome://instantbird/skin/tabbrowser/tab-top-selected-active.png) 0 11 fill repeat stretch;
-}
-
-/* preloading hack */
-.tabbrowser-strip::after {
-  content: '';
-  display: block;
-  background-image:
-    url(chrome://instantbird/skin/tabbrowser/tab-top-normal-active.png),
-    url(chrome://instantbird/skin/tabbrowser/tab-top-hover-active.png),
-    url(chrome://instantbird/skin/tabbrowser/tab-top-selected-active.png);
-}
-
-@media (min-resolution: 2dppx) {
-  .tabbrowser-tab > .tab-stack > .tab-content,
-  .tabbrowser-arrowscrollbox > .tabs-newtab-button > .toolbarbutton-icon {
-    border-image: url(chrome://instantbird/skin/tabbrowser/tab-top-normal-active@2x.png) 0 22 fill repeat stretch;
-  }
-
-  .tabbrowser-tab:hover > .tab-stack > .tab-content:not([selected="true"]),
-  .tabbrowser-arrowscrollbox > .tabs-newtab-button:hover > .toolbarbutton-icon {
-    border-image: url(chrome://instantbird/skin/tabbrowser/tab-top-hover-active@2x.png) 0 22 fill repeat stretch;
-  }
-
-  .tabbrowser-tab > .tab-stack > .tab-content[selected="true"] {
-    border-image: url(chrome://instantbird/skin/tabbrowser/tab-top-selected-active@2x.png) 0 22 fill repeat stretch;
-  }
-
-  /* preloading hack */
-  .tabbrowser-strip::after {
-    background-image:
-      url(chrome://instantbird/skin/tabbrowser/tab-top-normal-active@2x.png),
-      url(chrome://instantbird/skin/tabbrowser/tab-top-hover-active@2x.png),
-      url(chrome://instantbird/skin/tabbrowser/tab-top-selected-active@2x.png);
-  }
-}
-
-.tabbrowser-tab:focus > .tab-stack {
-  box-shadow: var(--focus-ring-box-shadow);
-}
-
-.tabbrowser-tab:not([selected="true"]):not(:hover):not(:-moz-lwtheme) {
-  color: #222;
-}
-
-.tabbrowser-tab[selected="true"] {
-  color: #000;
-  z-index: 1;
-  position: relative;
-}
-
-.tabbrowser-tab:-moz-lwtheme {
-  color: inherit;
-  text-shadow: inherit;
-}
-
-.tabbrowser-strip {
-  -moz-appearance: toolbar;
-  height: 26px;
-}
-
-.tabbrowser-strip:not(:-moz-lwtheme) {
-  padding-bottom: 1px; /* 2px in Firefox */
-  height: 25px; /* not in Firefox */
-}
-
-.tabbrowser-tabpanels:not(:-moz-lwtheme) {
-  border-top: 1px solid transparent;
-}
-
-.tabbrowser-tabs {
-  -moz-box-align: stretch;
-  height: 26px;
-}
-
-.tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox:not(:-moz-lwtheme) {
-  margin-bottom: -2px;
-}
-
-.tabbrowser-arrowscrollbox > .tabs-newtab-button > .toolbarbutton-icon {
-  padding: 4px 0 2px;
-}
-
-.tabbrowser-tab > .tab-stack > .tab-content {
-  padding-top: 2px;
-}
-
-@media (min-resolution: 2dppx) {
-  .tabbrowser-tab[chat][status="joining"],
-  .alltabs-item[chat][status="joining"] > .menu-iconic-left > .menu-iconic-icon {
-    list-style-image: url("chrome://global/skin/icons/loading@2x.png") !important;
-  }
-}
-
-/**
- * Tab Drag and Drop
- */
-
-.tab-drop-indicator-bar {
-  height: 10px;
-  margin-top: -10px;
-  position: relative;
-  /* set margin-inline-start to -1/2 indicator width: */
-  margin-inline-start: -5px;
-  margin-inline-end: -8px;
-}
-
-.tab-drop-indicator {
-  -moz-transform: scaleY(-1);
-  z-index: 2;
-  height: 33px;
-  width: 10px;
-  margin-bottom: -33px;
-  position: relative;
-  background: url('chrome://instantbird/skin/tabbrowser/tabDragIndicator.png') 50% 40% no-repeat;
-}
-
-@media (min-resolution: 2dppx) {
-  .tab-drop-indicator {
-    background: url('chrome://instantbird/skin/tabbrowser/tabDragIndicator@2x.png') 50% 40% no-repeat;
-    background-size: 12px 33px;
-  }
-}
-
-/**
- * In-tab close button
- */
-
-.tab-close-button > .toolbarbutton-icon {
-  margin-inline-end: 0px !important;
-}
-
-.tab-close-button {
-  list-style-image: url("chrome://global/skin/icons/close.png");
-  -moz-appearance: none;
-  border: none !important;
-  padding: 0;
-  margin: 0;
-  background: none;
-  cursor: default;
-  -moz-image-region: rect(0, 16px, 16px, 0);
-}
-
-.tab-close-button:hover {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
-}
-
-.tab-close-button:hover:active {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
-}
-
-@media (min-resolution: 2dppx) {
-  .tab-close-button {
-    list-style-image: url("chrome://global/skin/icons/close@2x.png");
-    -moz-image-region: rect(0, 32px, 32px, 0);
-  }
-
-  .tab-close-button:hover {
-    -moz-image-region: rect(0, 64px, 32px, 32px);
-  }
-
-  .tab-close-button:hover:active {
-    -moz-image-region: rect(0, 96px, 32px, 64px);
-  }
-
-  .tab-close-button > .toolbarbutton-icon {
-    width: 16px;
-  }
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up,
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  -moz-image-region: rect(0, 13px, 20px, 0);
-  margin: 0;
-  padding: 0 4px;
-  border: none;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up {
-  border-inline-end: 2px solid transparent;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  border-inline-start: 2px solid transparent;
-  -moz-transition: 1s background-color ease-out;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down[notifybgtab] {
-  background-color: Highlight;
-  -moz-transition: none;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(ltr),
-.tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://instantbird/skin/tabbrowser/tab-arrow-left.png");
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(ltr),
-.tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://instantbird/skin/tabbrowser/tab-arrow-right.png");
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:hover,
-.tabbrowser-arrowscrollbox > .scrollbutton-down:hover {
-  -moz-image-region: rect(0, 26px, 20px, 13px);
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:hover:active,
-.tabbrowser-arrowscrollbox > .scrollbutton-down:hover:active {
-  -moz-image-region: rect(0, 39px, 20px, 26px);
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up[disabled],
-.tabbrowser-arrowscrollbox > .scrollbutton-down[disabled] {
-  -moz-image-region: rect(0, 13px, 20px, 0px) !important;
-  opacity: 0.5;
-}
-
-@media (min-resolution: 2dppx) {
-  .tabbrowser-arrowscrollbox > .scrollbutton-up,
-  .tabbrowser-arrowscrollbox > .scrollbutton-down {
-    -moz-image-region: rect(0, 26px, 40px, 0);
-  }
-
-  .tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(ltr),
-  .tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(rtl) {
-    list-style-image: url("chrome://instantbird/skin/tabbrowser/tab-arrow-left@2x.png");
-  }
-
-  .tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(ltr),
-  .tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(rtl) {
-    list-style-image: url("chrome://instantbird/skin/tabbrowser/tab-arrow-right@2x.png");
-  }
-
-  .tabbrowser-arrowscrollbox > .scrollbutton-up:hover,
-  .tabbrowser-arrowscrollbox > .scrollbutton-down:hover {
-    -moz-image-region: rect(0, 52px, 40px, 26px);
-  }
-
-  .tabbrowser-arrowscrollbox > .scrollbutton-up:hover:active,
-  .tabbrowser-arrowscrollbox > .scrollbutton-down:hover:active {
-    -moz-image-region: rect(0, 78px, 40px, 52px);
-  }
-
-  .tabbrowser-arrowscrollbox > .scrollbutton-up[disabled] > .toolbarbutton-icon,
-  .tabbrowser-arrowscrollbox > .scrollbutton-down[disabled] > .toolbarbutton-icon {
-    -moz-image-region: rect(0, 26px, 40px, 0) !important;
-  }
-
-  .tabbrowser-arrowscrollbox > .scrollbutton-up > .toolbarbutton-icon,
-  .tabbrowser-arrowscrollbox > .scrollbutton-down > .toolbarbutton-icon {
-    width: 13px;
-  }
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):-moz-locale-dir(ltr),
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):-moz-locale-dir(rtl) {
-  border-width: 0 2px 0 0;
-  border-style: solid;
-  border-image: url("chrome://instantbird/skin/tabbrowser/tab-overflow-border.png") 0 2 0 2 fill;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):-moz-locale-dir(ltr),
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):-moz-locale-dir(rtl) {
-  border-width: 0 0 0 2px;
-  border-style: solid;
-  border-image: url("chrome://instantbird/skin/tabbrowser/tab-overflow-border.png") 0 2 0 2 fill;
-}
-
-/**
- * Tabstrip toolbar buttons
- */
-
-.tabs-alltabs-button,
-.tabs-alltabs-button > .toolbarbutton-menubutton-button,
-.tabs-alltabs-button > .toolbarbutton-menubutton-dropmarker {
-  margin: 0;
-  padding: 0 1px;
-  border: none;
-  border-radius: 0;
-  /* !important flags needed because of bug 561154: */
-  background: none !important;
-  box-shadow: none !important;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):hover,
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):hover,
-.tabs-alltabs-button:not([disabled]):not([open]):hover,
-.tabs-alltabs-button > .toolbarbutton-menubutton-button:not([disabled]):hover,
-.tabs-alltabs-button:not([disabled]):not([buttonover]):hover > .toolbarbutton-menubutton-dropmarker,
-.tabs-container > .tabs-newtab-button:hover {
-  background-image: -moz-linear-gradient(transparent, rgba(0,0,0,.15)) !important;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):hover:active,
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):hover:active,
-.tabs-alltabs-button:not([disabled]):hover:active,
-.tabs-alltabs-button[open],
-.tabs-alltabs-button > .toolbarbutton-menubutton-button:not([disabled]):hover:active,
-.tabs-alltabs-button[open]:not([disabled]):hover > .toolbarbutton-menubutton-dropmarker,
-.tabs-container > .tabs-newtab-button:active {
-  background-image: -moz-linear-gradient(transparent, rgba(0,0,0,.3)) !important;
-}
-
-.tabs-container > .tabs-newtab-button {
-  padding: 2px 0;
-}
-
-.tabs-newtab-button {
-  list-style-image: url(chrome://instantbird/skin/tabbrowser/newtab.png);
-  -moz-image-region: rect(0, 18px, 20px, 0);
-}
-
-.tabs-newtab-button:hover {
-  -moz-image-region: rect(0, 36px, 20px, 18px);
-}
-
-.tabs-newtab-button:hover:active {
-  -moz-image-region: rect(0, 54px, 20px, 36px);
-}
-
-@media (min-resolution: 2dppx) {
-  .tabs-newtab-button {
-    list-style-image: url(chrome://instantbird/skin/tabbrowser/newtab@2x.png);
-    -moz-image-region: rect(0, 36px, 40px, 0);
-  }
-
-  .tabs-newtab-button:hover {
-    -moz-image-region: rect(0, 72px, 40px, 36px);
-  }
-
-  .tabs-newtab-button:hover:active {
-    -moz-image-region: rect(0, 108px, 40px, 72px);
-  }
-
-  .tabs-newtab-button > .toolbarbutton-icon {
-    width: 40px;
-  }
-}
-
-.tabs-alltabs-button {
-  min-width: 28px;
-  list-style-image: url(chrome://instantbird/skin/tabbrowser/alltabs-box-bkgnd-icon.png);
-  -moz-image-region: rect(0, 17px, 20px, 0);
-}
-
-.tabs-alltabs-button:not([disabled="true"]):hover {
-  -moz-image-region: rect(0, 34px, 20px, 17px);
-}
-
-.tabs-alltabs-button[type="menu"][open="true"]:not([disabled="true"]),
-.tabs-alltabs-button:not([disabled="true"]):hover:active {
-  -moz-image-region: rect(0, 51px, 20px, 34px);
-}
-
-@media (min-resolution: 2dppx) {
-  .tabs-alltabs-button {
-    list-style-image: url(chrome://instantbird/skin/tabbrowser/alltabs-box-bkgnd-icon@2x.png);
-    -moz-image-region: rect(0, 34px, 40px, 0);
-  }
-
-  .tabs-alltabs-button:not([disabled="true"]):hover {
-    -moz-image-region: rect(0, 68px, 40px, 34px);
-  }
-
-  .tabs-alltabs-button[type="menu"][open="true"]:not([disabled="true"]),
-  .tabs-alltabs-button:not([disabled="true"]):hover:active {
-    -moz-image-region: rect(0, 102px, 40px, 68px);
-  }
-  .tabs-alltabs-button > .toolbarbutton-icon {
-    width: 17px;
-  }
-}
-
-.tabs-alltabs-button > .toolbarbutton-menu-dropmarker,
-.tabs-alltabs-button > .toolbarbutton-text {
-  display: none;
-}
-
-.tabs-alltabs-button > .toolbarbutton-icon {
-  margin-inline-end: 2px;
-}
-
-/* Tabstrip close button */
-.tabs-closebutton {
-  padding-inline-end: 4px;
-  list-style-image: url("chrome://global/skin/icons/close.png");
-  -moz-image-region: rect(0, 16px, 16px, 0);
-  border: none;
-}
-
-.tabs-closebutton:hover {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
-}
-
-.tabs-closebutton:hover:active {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
-}
-
-@media (min-resolution: 2dppx) {
-  .tabs-closebutton {
-    padding-inline-end: 8px;
-    list-style-image: url("chrome://global/skin/icons/close@2x.png");
-    -moz-image-region: rect(0, 32px, 32px, 0);
-  }
-
-  .tabs-closebutton:hover {
-    -moz-image-region: rect(0, 64px, 32px, 32px);
-  }
-
-  .tabs-closebutton:hover:active {
-    -moz-image-region: rect(0, 96px, 32px, 64px);
-  }
-}
-
-.alltabs-item[tabIsVisible] {
-  /* box-shadow instead of background-color to work around native styling */
-  box-shadow: inset -5px 0 ThreeDShadow;
-}
-
-
-/* Status panel */
-
-.statuspanel-label {
-  margin: 0;
-  padding: 2px 4px;
-  background: linear-gradient(#fff, #ddd);
-  border: 1px none #ccc;
-  border-top-style: solid;
-  color: #333;
-  text-shadow: none;
-}
-
-.statuspanel-label:-moz-locale-dir(ltr):not([mirror]),
-.statuspanel-label:-moz-locale-dir(rtl)[mirror] {
-  border-right-style: solid;
-  border-top-right-radius: .3em;
-  margin-right: 1em;
-}
-
-.statuspanel-label:-moz-locale-dir(rtl):not([mirror]),
-.statuspanel-label:-moz-locale-dir(ltr)[mirror] {
-  border-left-style: solid;
-  border-top-left-radius: .3em;
-  margin-left: 1em;
-}
-
deleted file mode 100755
index 7f5f55ef2b3ccc210bc66fec70c61405024819c0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 404f3af1cafe487d668a64e062d9e4c79d1b2882..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0ef2b1ae61e2d4396ac70fab94dab6a7b49ef1aa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 77f2462e5bfda652074261e2e160fcbc99c3e04e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fb0fc676f11c54d4b5af1e284e72a8e8b5b3f684..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c67c2337d2816edea7288e16719b0191be6a900a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/tabbrowser-winstripe/tabbrowser-aero.css
+++ /dev/null
@@ -1,95 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%define WINSTRIPE_AERO
-%include tabbrowser.css
-%undef WINSTRIPE_AERO
-
-%define customToolbarColor hsl(214,44%,87%)
-%define glassActiveBorderColor rgb(37, 44, 51)
-%define glassInactiveBorderColor rgb(102, 102, 102)
-
-@media all and (-moz-windows-default-theme) {
-  .tabbrowser-strip:not(:-moz-lwtheme) {
-    background-color: @customToolbarColor@;
-  }
-
-  .tabbrowser-tab:not(:-moz-lwtheme),
-  .tabs-newtab-button:not(:-moz-lwtheme) {
-    background-image: @toolbarShadowOnTab@, @bgTabTexture@,
-                      -moz-linear-gradient(@customToolbarColor@, @customToolbarColor@);
-  }
-
-  .tabbrowser-tab:not(:-moz-lwtheme):hover,
-  .tabs-newtab-button:not(:-moz-lwtheme):hover {
-    background-image: @toolbarShadowOnTab@, @bgTabTextureHover@,
-                      -moz-linear-gradient(@customToolbarColor@, @customToolbarColor@);
-  }
-
-  .tabbrowser-tab[selected="true"]:not(:-moz-lwtheme) {
-    background-image: -moz-linear-gradient(white, @toolbarHighlight@ 50%),
-                      -moz-linear-gradient(@customToolbarColor@, @customToolbarColor@);
-  }
-}
-
-@media all and (-moz-windows-compositor) {
-  #convWindow {
-    -moz-appearance: -moz-win-borderless-glass;
-    background: transparent;
-  }
-
-  .tabbrowser-strip:not(:-moz-lwtheme) {
-    background-color: transparent !important;
-    color: black;
-    text-shadow: 0 0 .5em white, 0 0 .5em white, 0 1px 0 rgba(255,255,255,.4);
-    border-left-style: none !important;
-    border-right-style: none !important;
-  }
-
-  .tabbrowser-strip:-moz-lwtheme {
-    border-color: transparent !important;
-  }
-
-  /* Toolbar shadow behind tabs */
-  .tabbrowser-strip:not(:-moz-lwtheme) {
-    border-top: 1px solid @toolbarShadowColor@;
-    border-top-left-radius: 3.5px;
-    border-top-right-radius: 3.5px;
-    background-clip: padding-box;
-    margin-bottom: -1px;
-    background-image: none !important;
-  }
-
-  .tabbrowser-tabs > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox > .scrollbox-innerbox:not(:-moz-lwtheme) {
-    position: relative;
-  }
-
-  .tabbrowser-strip {
-    padding-left: 4px;
-    padding-right: 4px;
-  }
-
-  /* Make the window draggable by glassed toolbars (bug 555081) */
-  .tabbrowser-strip {
-    -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag");
-  }
-
-  .tabbrowser-tab:not(:-moz-lwtheme) {
-    text-shadow: none;
-  }
-}
-
-@media not all and (-moz-windows-compositor) {
-  #convWindow:-moz-system-metric(windows-default-theme) {
-    background-color: rgb(185,209,234);
-  }
-  #convWindow:-moz-system-metric(windows-default-theme):-moz-window-inactive {
-    background-color: rgb(215,228,242);
-  }
-
-  .tabbrowser-strip:not(:-moz-lwtheme):-moz-system-metric(windows-default-theme) {
-    -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag");
-    background-color: transparent;
-  }
-}
deleted file mode 100644
--- a/im/themes/tabbrowser-winstripe/tabbrowser.css
+++ /dev/null
@@ -1,371 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-@import url("chrome://global/skin/");
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-%filter substitution
-%define toolbarHighlight rgba(255,255,255,.5)
-%define selectedTabHighlight rgba(255,255,255,.7)
-%define toolbarShadowColor rgba(10%,10%,10%,.4)
-%define toolbarShadowOnTab -moz-linear-gradient(bottom, rgba(10%,10%,10%,.4) 1px, transparent 1px)
-%define bgTabTexture -moz-linear-gradient(transparent, hsla(0,0%,45%,.1) 1px, hsla(0,0%,32%,.2) 80%, hsla(0,0%,0%,.2))
-%define bgTabTextureHover -moz-linear-gradient(hsla(0,0%,100%,.3) 1px, hsla(0,0%,75%,.2) 80%, hsla(0,0%,60%,.2))
-
-.tabbrowser-strip {
-  background-image: -moz-linear-gradient(@toolbarHighlight@, rgba(255,255,255,0));
-}
-
-/* ::::: primary toolbar buttons ::::: */
-
-toolbarbutton {
-  -moz-box-orient: vertical;
-}
-
-toolbarbutton > .toolbarbutton-menubutton-button > .toolbarbutton-icon,
-toolbarbutton > .toolbarbutton-icon {
-  margin-inline-end: 0;
-}
-
-.tabs-container > toolbarbutton,
-.tabs-container > toolbarbutton > .toolbarbutton-menubutton-button,
-.tabbrowser-arrowscrollbox > .scrollbutton-up,
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  -moz-appearance: none;
-  border-style: none;
-  padding: 0 3px;
-}
-
-.tabs-container > toolbarbutton:not([disabled]):hover,
-.tabs-container > toolbarbutton[open],
-.tabs-container > toolbarbutton > .toolbarbutton-menubutton-button:not([disabled]):hover,
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):hover,
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):hover {
-  background-image: -moz-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,.5)),
-                    -moz-linear-gradient(transparent, rgba(0,0,0,.25) 30%),
-                    -moz-linear-gradient(transparent, rgba(0,0,0,.25) 30%);
-  background-position: 1px -1px, 0 -1px, 100% -1px;
-  background-size: -moz-calc(100% - 2px) 100%, 1px 100%, 1px 100%;
-  background-repeat: no-repeat;
-}
-
-/* Tabstrip */
-
-.tabbrowser-strip {
-  min-height: 0;
-  padding: 0;
-}
-
-.tabbrowser-strip:not(:-moz-lwtheme) {
-  background-image:
-    -moz-linear-gradient(bottom, @toolbarShadowColor@ 1px, rgba(0,0,0,.05) 1px, transparent 50%);
-}
-
-%ifndef WINSTRIPE_AERO
-@media all and (-moz-windows-default-theme) {
-  .tabbrowser-strip {
-    padding-left: 2px;
-    padding-right: 2px;
-  }
-}
-%endif
-
-.tabbrowser-tab,
-.tabbrowser-arrowscrollbox > .tabs-newtab-button {
-  -moz-appearance: none;
-  background: @toolbarShadowOnTab@, @bgTabTexture@,
-              -moz-linear-gradient(-moz-dialog, -moz-dialog);
-  background-origin: border-box;
-  background-position: 1px 2px;
-  background-size: -moz-calc(100% - 2px) -moz-calc(100% - 2px);
-  background-repeat: no-repeat;
-  margin: 0;
-  padding: 0;
-  border-width: 6px 3px 4px;
-  border-style: solid;
-  border-image: url(tabbrowser/tab.png) 6 3 4 fill repeat stretch;
-  border-radius: 7px 7px 0 0;
-}
-
-.tabbrowser-tab:hover,
-.tabs-newtab-button:hover {
-  background-image: @toolbarShadowOnTab@, @bgTabTextureHover@,
-                    -moz-linear-gradient(-moz-dialog, -moz-dialog);
-}
-
-%ifndef WINSTRIPE_AERO
-@media all and (-moz-windows-theme: luna-blue) {
-  .tabbrowser-tab,
-  .tabs-newtab-button {
-    background-image: @toolbarShadowOnTab@,
-                      -moz-linear-gradient(hsla(51,34%,89%,.9), hsla(51,15%,79%,.9) 1px, hsla(51,9%,68%,.9));
-  }
-
-  .tabbrowser-tab:hover,
-  .tabs-newtab-button:hover {
-    background-image: @toolbarShadowOnTab@,
-                      -moz-linear-gradient(hsla(51,34%,100%,.9), hsla(51,15%,94%,.9) 1px, hsla(51,9%,83%,.9));
-  }
-}
-%endif
-
-.tabbrowser-tab[selected="true"] {
-  background-image: -moz-linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 50%),
-                    -moz-linear-gradient(-moz-dialog, -moz-dialog);
-}
-
-.tabbrowser-tab:-moz-lwtheme {
-  color: inherit;
-}
-
-.tabbrowser-tab[selected="true"]:-moz-lwtheme {
-  background-image: -moz-linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 50%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabs-newtab-button:-moz-lwtheme-brighttext {
-  background-image: -moz-linear-gradient(hsla(0,0%,40%,.6), hsla(0,0%,30%,.6) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-brighttext:not([selected="true"]):hover,
-.tabs-newtab-button:-moz-lwtheme-brighttext:hover {
-  background-image: -moz-linear-gradient(hsla(0,0%,60%,.6), hsla(0,0%,45%,.6) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-darktext:not([selected="true"]),
-.tabs-newtab-button:-moz-lwtheme-darktext {
-  background-image: -moz-linear-gradient(hsla(0,0%,60%,.5), hsla(0,0%,45%,.5) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-darktext:not([selected="true"]):hover,
-.tabs-newtab-button:-moz-lwtheme-darktext:hover {
-  background-image: -moz-linear-gradient(hsla(0,0%,80%,.5), hsla(0,0%,60%,.5) 80%);
-}
-
-.tab-icon-image {
-  width: 16px;
-  height: 16px;
-  margin-inline-start: 2px;
-  margin-inline-end: 3px;
-}
-
-/* tabbrowser-tab focus ring */
-.tabbrowser-tab:focus > .tab-stack {
-  outline: 1px dotted;
-}
-
-/* Tab DnD indicator */
-.tab-drop-indicator-bar {
-  height: 11px;
-  margin-top: -11px;
-  position: relative;
-  /* set margin-inline-start to -1/2 indicator width: */
-  margin-inline-start: -5px;
-  margin-inline-end: -8px;
-}
-
-.tab-drop-indicator {
-  margin-top: 37px;
-  height: 11px;
-  width: 11px;
-  margin-bottom: -37px;
-  position: relative;
-  background: url('chrome://instantbird/skin/tabbrowser/tabDragIndicator.png') 50% 50% no-repeat;
-}
-
-/* Tab close button */
-.tab-close-button {
-  -moz-appearance: none;
-  -moz-image-region: rect(0, 64px, 16px, 48px);
-  border: none;
-  padding: 0px;
-  list-style-image: url("chrome://global/skin/icons/close-win7.png");
-}
-
-.tab-close-button:-moz-system-metric(touch-enabled) {
-  -moz-transform: scale(1.2);
-}
-
-.tab-close-button:hover,
-.tab-close-button:hover[selected="true"] {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
-}
-
-.tab-close-button:hover:active,
-.tab-close-button:hover:active[selected="true"] {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
-}
-
-.tab-close-button[selected="true"] {
-  -moz-image-region: rect(0, 16px, 16px, 0);
-}
-
-.tab-close-button:focus {
-  outline: none !important;
-}
-
-/* Tab scrollbox arrow, tabstrip new tab and all-tabs buttons */
-
-@media all and (-moz-touch-enabled) {
-  .tabbrowser-arrowscrollbox > .scrollbutton-up,
-  .tabbrowser-arrowscrollbox > .scrollbutton-down,
-  .tabbrowser-strip .toolbarbutton-1 {
-    min-width: 8.1mozmm;
-  }
-
-  .tabs-newtab-button {
-    min-width: 10mozmm;
-  }
-
-  .tab-content {
-    min-height: -moz-calc(6.8mozmm - 7px); /* subtract borders from the desired height */
-  }
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up,
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  list-style-image: url("chrome://instantbird/skin/tabbrowser/tab-arrow-left.png");
-  -moz-image-region: rect(0, 15px, 17px, 0);
-  margin: 0;
-  padding-right: 2px;
-  border-right: 2px solid transparent;
-  background-origin: border-box;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up[disabled],
-.tabbrowser-arrowscrollbox > .scrollbutton-down[disabled] {
-  opacity: .4;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):hover:active,
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):hover:active {
-  -moz-image-region: rect(0, 30px, 17px, 15px);
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(rtl),
-.tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(ltr) {
-  -moz-transform: scaleX(-1);
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down {
-  -moz-transition: 1s background-color ease-out;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down[notifybgtab] {
-  background-color: Highlight;
-  -moz-transition: none;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]),
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]) {
-  border-width: 0 2px 0 0;
-  border-style: solid;
-  border-image: url("chrome://instantbird/skin/tabbrowser/tab-overflow-border.png") 0 2 0 2 fill;
-}
-
-.tabs-newtab-button > .toolbarbutton-icon {
-  margin-top: -1px;
-  margin-bottom: -1px;
-}
-
-.tabs-newtab-button {
-  list-style-image: url(chrome://instantbird/skin/tabbrowser/newtab.png);
-  -moz-image-region: rect(0, 16px, 18px, 0);
-}
-
-.tabs-newtab-button {
-  width: 30px;
-}
-
-.tabs-newtab-button:hover:active {
-  -moz-image-region: rect(0, 32px, 18px, 16px);
-}
-
-.tabs-alltabs-button {
-  list-style-image: url("chrome://instantbird/skin/tabbrowser/mainwindow-dropdown-arrow.png");
-  -moz-image-region: rect(0, 13px, 11px, 0);
-}
-
-.tabs-alltabs-button > .toolbarbutton-icon {
-  margin: 3px 0;
-}
-
-.tabs-alltabs-button > .toolbarbutton-text,
-.tabs-alltabs-button > .toolbarbutton-menu-dropmarker {
-  display: none;
-}
-
-.tabs-alltabs-button:hover:active,
-.tabs-alltabs-button[open="true"] {
-  -moz-image-region: rect(0, 26px, 11px, 13px);
-}
-
-/* All tabs menupopup */
-.alltabs-item[selected="true"] {
-  font-weight: bold;
-}
-
-.alltabs-item[tabIsVisible] {
-  /* box-shadow instead of background-color to work around native styling */
-  box-shadow: inset -5px 0 ThreeDShadow;
-}
-
-/* Tabstrip close button */
-.tabs-closebutton {
-  -moz-appearance: none;
-  list-style-image: url("chrome://global/skin/icons/close-win7.png");
-  -moz-image-region: rect(0, 16px, 16px, 0);
-  padding: 4px 2px;
-  margin: 0px;
-  border: none;
-}
-
-.tabs-closebutton > .toolbarbutton-icon {
-  margin-inline-end: 0px !important;
-  padding-inline-end: 2px !important;
-  padding-inline-start: 2px !important;
-}
-
-.tabs-closebutton:hover {
-  -moz-image-region: rect(0, 32px, 16px, 16px);
-}
-
-.tabs-closebutton:hover:active {
-  -moz-image-region: rect(0, 48px, 16px, 32px);
-}
-
-
-/* Status panel */
-
-.statuspanel-label {
-  margin: 0;
-  padding: 2px 4px;
-  background: linear-gradient(#fff, #ddd);
-  border: 1px none #ccc;
-  border-top-style: solid;
-  color: #333;
-  text-shadow: none;
-}
-
-.statuspanel-label:-moz-locale-dir(ltr):not([mirror]),
-.statuspanel-label:-moz-locale-dir(rtl)[mirror] {
-  border-right-style: solid;
-  /* disabled for triggering grayscale AA (bug 659213)
-  border-top-right-radius: .3em;
-  */
-  margin-right: 1em;
-}
-
-.statuspanel-label:-moz-locale-dir(rtl):not([mirror]),
-.statuspanel-label:-moz-locale-dir(ltr)[mirror] {
-  border-left-style: solid;
-  /* disabled for triggering grayscale AA (bug 659213)
-  border-top-left-radius: .3em;
-  */
-  margin-left: 1em;
-}
-
-
deleted file mode 100644
index da906245de7889f992f374c14b64c452606d58c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 27176cc6d5643ac40d6a0b6b4ee77b847f8d0096..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a4038bb4fa7c7cba67550edc3e0f05a237c03cb6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100755
index 673814bb5c3ce861368b9bfce05176ee9c3144be..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4c876b92b0faf34c5a01102ca80789a1f169e8da..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f0f321f806a3e99d9683a42a76da0177dcd953c4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/im/themes/userIcon.svg
+++ /dev/null
@@ -1,1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path style="opacity:0.25" d="m 102.67,29.68 c 14.96,0.12 30.01,11.21 33.20,26.00 -0.51,8.53 0.78,16.56 1.03,24.90 0.58,8.90 -7.86,14.56 -8.45,23.02 -1.86,6.90 -6.91,15.36 2.03,19.28 6.53,10.05 18.56,13.25 29.58,15.58 10.26,2.06 22.93,7.02 24.40,18.94 2.96,13.96 4.36,28.27 4.14,42.55 -58.61,0 -117.22,0 -175.84,0 0.68,-14.69 0.68,-29.77 5.09,-43.93 2.73,-9.40 12.21,-13.18 20.55,-16.20 9.25,-4.29 19.66,-5.81 28.54,-10.82 5.51,-5.56 16.05,-11.86 10.05,-20.90 -1.90,-7.90 -5.37,-14.76 -9.19,-21.75 -3.52,-9.28 1.30,-18.10 0.71,-27.53 0.52,-7.65 0.91,-16.78 8.42,-21.07 7.49,-3.01 15.24,-5.47 22.96,-7.89 l 1.34,-0.13 1.35,-0.05 0,0 z"/></svg>
\ No newline at end of file
deleted file mode 100644
--- a/im/themes/viewlog.css
+++ /dev/null
@@ -1,86 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-%ifdef XP_MACOSX
-#logTree {
-  -moz-appearance: none;
-  background-color: #d2d8e2;
-  border: 0px;
-  margin: 0 0;
-}
-
-#logTree:-moz-window-inactive {
-  background-color: #e8e8e8;
-}
-
-/* Override the -moz-field background color set by tree.css. */
-treechildren::-moz-tree-row {
-  background-color: transparent;
-}
-
-/* Unfortunately the previous rule also overrides the backgrounds of
-selected rows, so set them again like they are in tree.css. */
-treechildren::-moz-tree-row(selected) {
-  background-color: -moz-mac-secondaryhighlight;
-}
-
-treechildren::-moz-tree-row(selected, focus) {
-  background-color: Highlight;
-}
-
-splitter {
-  border-inline-end: none !important;
-  border-inline-start: 1px solid #404040;
-  min-width: 1px;
-  width: 1px;
-}
-
-splitter:-moz-window-inactive {
-  border-color: rgba(0,0,0,0.35);
-}
-%else
-%ifdef XP_WIN
-#logTree {
-  -moz-appearance: none;
-  border: none;
-  margin: 0 0;
-}
-%else
-#browser {
-  -moz-appearance: listbox;
-}
-
-#logTree {
-  margin: 0 0;
-}
-%endif
-%endif
-
-#corruptLogScreen {
-  color: -moz-FieldText;
-  background-color: -moz-Field;
-  overflow: auto;
-  font-size: 16px;
-  font-weight: normal;
-}
-
-#corruptLogBox {
-  max-width: calc(500px + 7em);
-  min-height: 3em;
-  background: url("chrome://global/skin/icons/warning.svg") left 0 no-repeat;
-  background-size: 3em;
-  margin-right: .5em;
-  margin-left: .5em;
-  padding-right: 3.5em;
-  padding-left: 3.5em;
-}
-
-#corruptLogInnerBox {
-  opacity: .8;
-}
-
-#corruptLogDesc {
-  margin-right: 0;
-  margin-left: 0;
-}
deleted file mode 100644
index 43cc90eea0bff35daf698119be6da11c61a546f6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 27cf9974d32f345d4444c2d67aff487786476f28..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index db3464c021abf8e1216e420c6c6a54884926ec17..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d1a7fdfe7dceb362f832f91e6d17554b78aeea19..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fb3aabff9b6612e0b5d684ba45630a4c47638d3a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c47703b6298b00a117ce5b2d90215e830527e9f5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cbfe89282ee5f19a6dcc5ad9c2f0a346b663aacc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 88d97f99f81ad487f903bdf06b3a81a5db0c1ae3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 87eec6195960580f581e7b9975633913bc0a2e7e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a128bdb6bf1a4f32e1a691cc0300ade1080d38e7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 197b33d56fb32ded28df8d95185e7a3ecef37f18..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8ff47406e831a2f0fca339739b99452ec471350a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 36e2fafe88a8c0e45d05c3485d8adba03601d18a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cc2660dc78c3d13fa7721b1452e327d9862e9076..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2d060a15886d0e38253ba18986025fd837b052ad..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4d08551d9c43f547dc0f356b31965b0c253d8407..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e80b03b16551d1261b592b440491eb7adfaa3714..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2f04aab9e02c5f09320d2800d3e583908a2f3a88..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9e92ad97292960ebbc2391fbb59c3ce804ebf21f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d08637ceb7da661562164b8680b2d7180b79b351..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 964abdfeafc29896beea832b264ee0fac6fe0d83..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 606425fabb7aa1d5e9e490ad5d74bc55c4c94262..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 19d578deda123c41b441aef78f147fdf74bd426d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 30bde7eadad28d8218d896a18a3e83e1df447d57..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 075518894459b42b77a1ae28abd2164d0552751d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ea9f2e36036cf353683b67a2f3e76744306b9a11..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 61af60046c5f14c76a8d55a86e015da0029b6152..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f747a560024047bcd52c22952bc0c4219e06424e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 59b819c525974ffd393446080b6ccaadf8df076c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c06eed2aa402eeb24e1d8083ef5b427227ba1bfe..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1b960dd327dbeda55002d9fac245c07dbd04fd90..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 896d90cfbb9042179468285ab71647faffe2651c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index be84393d82d58a453055160ba45669d3821a3fff..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a07f8e1f9f914d473879a9feada8ad09d0916772..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ae8ed7782683f3af3f35a85e042fa99109e4df38..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f475175f2e8016562ae86e30d21f16d559362e3a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8b8778fb52ed0658de3dce33c69f122ddaadf7b4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 76ca119fe8cea95151d6de95aa3bf88b6616ccd7..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5f7063b8397d2edec38c95d947cf2436fc94bbd8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 41b8f123cf6036cbe0e8f447098502b4a37b0c5c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d5f51ac4c73ae9a714ac17d1227fcac9d9d23229..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 068ca8f161b98e8c52fe5c44b048770e21cc956c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e43d9c2cb70be66ad1e1cb434a7d1ef1d33a15b4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2fb91eb720515a741178c8120eb37b1878a2948f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index aea78cb332e8659a2df7948a8ad37f7a337f5f61..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7e81d3e64a82e89c6aa5dcbb7c100d55467989f9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 14db36c9e9a08c57d9cfd61f67f52b0f355dc6fc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index aefe383c32c0cdd7ab2a1a3746a8feb62dfbf0a5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f454f26d3c720fba9de9eecb362491460394c093..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4cff5da7fc2c1802f64cd36c5713cb4aa9aa1d52..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2e772cd0fa3a3f29e2d5c20d9fe2005b2a98ec84..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 83bb3e20a5eeac78c7c58d7f2caee0efd5d797cf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fcc40a821e939fecf00c14c13c2b0beb00859d30..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001